Jak wyzwolić odświeżenie w module medialnym

12

Tworzę wtyczkę, która dodaje nową kartę do modalnego trybu multimediów i muszę znać sposób, w jaki można uruchomić odświeżanie karty załączników, aby wyświetlała nowo dodane załączniki. Oto kod, którego używam:

wp.media.view.Toolbar.Custom = wp.media.view.Toolbar.extend({
    initialize: function() {
        _.defaults( this.options, {
            event: 'custom_event',
            close: false,
            items: {
                custom_event: {
                    text: wp.media.view.l10n.customButton,
                    style: 'primary',
                    priority: 80,
                    requires: false,
                    click: this.addAttachment
                }
            }
        });

        wp.media.view.Toolbar.prototype.initialize.apply( this, arguments );
    },

    // triggered when the button is clicked
    addAttachment: function(){
        this.controller.state().addAttachment();
        this.controller.setState( 'insert' );
        // I NEED TO TRIGGER A REFRESH OF THE ATTACHMENTS TAB HERE
    }
});

Każda pomoc będzie mile widziana. Dokumentacja modalna mediów prawie nie istnieje.

Dzięki

leemon
źródło
IIRC to tylko widoki Backbone / Underscore. Innymi słowy, podczas aktualizacji modelu powinien on sam zaktualizować widok, ponieważ „ModelView” powinien to wyzwolić.
kaiser
Cóż, this.controller.state().addAttachment()funkcja jest tylko wywołaniem AJAX wp.media.post(), więc musiałbym wyzwolić hipotetyczne zdarzenie „zaktualizowano model” gdzieś po tym wywołaniu AJAX. Jakieś pomysły?
leemon
"Jakieś pomysły?" - obecnie nie. Jest to coś, w co musiałbym poświęcić sporo czasu, aby przeczytać rdzeń (którego nie mam teraz). O twoim komentarzu: Dostępny jest MarkDown (Zobacz „pomoc” poniżej przycisku „dodaj komentarz”).
kaiser

Odpowiedzi:

2

Możesz sprawdzić ten link https://codex.wordpress.org/Javascript_Reference/wp.media

jQuery(function($){

  // Set all variables to be used in scope
  var frame,
      metaBox = $('#meta-box-id.postbox'), // Your meta box id here
      addImgLink = metaBox.find('.upload-custom-img'),
      delImgLink = metaBox.find( '.delete-custom-img'),
      imgContainer = metaBox.find( '.custom-img-container'),
      imgIdInput = metaBox.find( '.custom-img-id' );

  // ADD IMAGE LINK



addImgLink.on( 'click', function( event ){

    event.preventDefault();

    // If the media frame already exists, reopen it.
    if ( frame ) {
      frame.open();
      return;
    }

    // Create a new media frame
    frame = wp.media({
      title: 'Select or Upload Media Of Your Chosen Persuasion',
      button: {
        text: 'Use this media'
      },
      multiple: false  // Set to true to allow multiple files to be selected
    });


    // When an image is selected in the media frame...
    frame.on( 'select', function() {

      // Get media attachment details from the frame state
      var attachment = frame.state().get('selection').first().toJSON();

      // Send the attachment URL to our custom image input field.
      imgContainer.append( '<img src="'+attachment.url+'" alt="" style="max-width:100%;"/>' );

      // Send the attachment id to our hidden input
      imgIdInput.val( attachment.id );

      // Hide the add image link
      addImgLink.addClass( 'hidden' );

      // Unhide the remove image link
      delImgLink.removeClass( 'hidden' );
    });

    // Finally, open the modal on click
    frame.open();
  });


  // DELETE IMAGE LINK
  delImgLink.on( 'click', function( event ){

    event.preventDefault();

    // Clear out the preview image
    imgContainer.html( '' );

    // Un-hide the add image link
    addImgLink.removeClass( 'hidden' );

    // Hide the delete image link
    delImgLink.addClass( 'hidden' );

    // Delete the image id from the hidden input
    imgIdInput.val( '' );

  });

});
Rajilesh Panoli
źródło
1

Spróbować:

wp.media.editor.get(wpActiveEditor).views._views[".media-frame-content"][0].views._views[""][1].collection.props.set({ignore:(+(new Date()))})

Wygląda na to, że musi istnieć łatwiejszy sposób, ale tymczasem mi to działa!

Lepszy sposób na zrobienie tego:

wp.media.frame.content.get('gallery').collection.props.set({‌​ignore: (+ new Date())});, 

w tym przypadku odświeżam kartę galerii.

Wypróbuj oba powyższe kody i sprawdź, który z nich jest dla Ciebie najlepszy.

trusha
źródło
1
To mi pomogło! Dzięki.
Siddhesh Shirodkar
1
tak, to też działało dla mnie.
Amol Bhandari SJ,