Odświeżanie wyzwalacza dla nowego menedżera multimediów w 3.5

23

Próbuję dowiedzieć się, jak można „odświeżyć” bibliotekę multimediów w nowym dialogu mediów w 3.5. Dodaję obrazy z zewnętrznej biblioteki obrazów do biblioteki WordPress (za pomocą kombinacji tab / iFrame w oknie dialogowym mediów), co działa dobrze, ale muszę zamknąć i ponownie otworzyć okno dialogowe, aby wyświetlić nowo dodane obrazy (które mają pomyślnie dodany do biblioteki).

Wiem, że istnieją wp.media.editor.open()i wp.media.editor.close()metody, ale nie jestem w stanie znaleźć sort()ani jednego refresh()(ani nic innego) w źródle. Prawdę mówiąc, kod źródłowy jest dość intensywny i console.lognajwyraźniej nie pomaga w backbone.js. Jakieś pomysły?

Richard Sweeney
źródło
3
Jeszcze jedno pytanie do galerii „New Media Manager: The Great Unknown” . Zgodnie z rytmem oczekuję pełnej dokumentacji i haków wokół WP 3.7 ... Wszystkie głosy poparcia wskazują na głodną społeczność.
brasofilo
Zamiast funkcji refresh () możemy użyć kombinacji funkcji wp.media.editor.close () i wp.media.editor.open () w celu uzyskania pożądanego wyniku.
Vinod Dalvi
Na przykład w polecanym narzędziu do wybierania obrazów znajduje się przełącznik w linii wp-obejmuje / js / media-views.js 3644, aby sprawdzić, czy biblioteka multimediów została załadowana. Wydaje się, że jest to odniesienie, wp.media.featuredImage.frame().views.get('.media-frame-content')[0].views.get("")[3].collection.lengthale ustawienie tej długości na 0 nic nie robi.
NoBugs,

Odpowiedzi:

7

Prawidłowy sposób odświeżania zawartości ramki, jaki znajduje się w rdzeniu WP, jest następujący:

if(wp.media.frame.content.get()!==null){
   wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
   wp.media.frame.content.get().options.selection.reset();
}else{
   wp.media.frame.library.props.set({ignore: (+ new Date())});
}

Zawsze należy sprawdzić, czy zawartość jest dostępna, w przeciwnym razie odśwież bibliotekę.

Twoje zdrowie!

timocouckuyt
źródło
Gdzie to jest w rdzeniu WP?
NoBugs,
Czy jesteś pewien, że to nadal jest poprawne? Wydaje się wp.media.featuredImage.frame().options.selection.reset, że istnieje, ale nie ma wp.media.featuredImage.frame().collectionna przykład.
NoBugs,
4

Zajęło mi to kilka dni, ale w końcu przekopałem się przez wystarczająco dużo rzeczy, aby to zrozumieć:

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 to działa dla mnie!

Nicky Hajal
źródło
1
wydaje się takie intuicyjne :) niemniej to działa !! DZIĘKUJĘ CI!!!
Andrej
3
właśnie znalazłem „bardziej oficjalny” sposób: wp.media.frame.content.get('gallery').collection.props.set({ignore: (+ new Date())});w tym przypadku odświeżam gallerykartę.
Jermim bilal
2
Podczas gdy oba polecenia wyzwalają odświeżenie, później nie możesz już dodawać obrazów w modale :( potrzebujesz innego rozwiązania tego
Benjamin Intal
To wciąż dalekie od idealnego rozwiązania, ale warto zauważyć, że media-frame-contentklucz zmienił się z 1 na 2:wp.media.editor.get(wpActiveEditor).views._views[".media-frame-content"][0].views._views[""][2].collection.props.set({ignore:(+(new Date()))})
Ian
Z powyższego powodu lepiej jest użyć bardziej ogólnej wersji opublikowanej gdzie indziej w tym pytaniu:wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
Ian
1

Aktualizacja 2019 Znalazłem lepsze rozwiązanie, które nie psuje przesyłającego:

wp.media.frame.on('open', function() {
    if (wp.media.frame.content.get() !== null) {          
        // this forces a refresh of the content
        wp.media.frame.content.get().collection._requery(true);

        // optional: reset selection
        wp.media.frame.content.get().options.selection.reset();
    }
}, this);
z1ad
źródło
0

czy tego szukasz?

wp.media.editor.remove('content');
wp.media.editor.add('content');
Rajeev Vyas
źródło
Proszę wyjaśnić, dlaczego to może rozwiązać problem.
fuxia