2013-08-01 9 views
13

Mam więc dziwny problem, którego nie mogę znaleźć nigdzie indziej, dotyczący masonry.js.Masonry.js nie działa przy obciążeniu. Nie można wywołać 'create' z undefined (Outerlayer) w Wordpressie

Mam the latest (3.10) version a ja go w tym pliku functions.php mojego WordPress jako sposób:

function enqueue() 
{ 
    wp_register_script('masonry', get_stylesheet_directory_uri() . '/js/masonry.js', array('jquery')); 
    wp_enqueue_script('masonry'); 
} 

add_action('wp_enqueue_scripts', 'enqueue'); 

Które się ładuje grzywny skryptu. Jak jest teraz, nie robię niczegojeszcze z nim, ale skrypt nie udaje:

Uncaught TypeError: Cannot call method 'create' of undefined masonry.js?ver=3.5.2:37 

Wydaje się jakby to nie można nazwać tworzyć na window.Outerlayer jak robi istnieje.

Oto kod w pytaniu, zaczynając od linii 34 z masonry.js:

// used for AMD definition and requires 
function masonryDefinition(Outlayer, getSize) { 
    // create an Outlayer layout class 
    var Masonry = Outlayer.create('masonry'); 

    Masonry.prototype._resetLayout = function() { 
    this.getSize(); 
    this._getMeasurement('columnWidth', 'outerWidth'); 
    this._getMeasurement('gutter', 'outerWidth'); 
    this.measureColumns(); 

    // reset column Y 
    var i = this.cols; 
    this.colYs = []; 
    while (i--) { 
     this.colYs.push(0); 
    } 

    this.maxY = 0; 
    }; 

Próbowałem skolejkowania skrypt w różny sposób, a także pociągnięcie go tylko wtedy, gdy $ (document) .ready() (co, jak sądzę, robi skrypt "enqueue_script"?).

Czy ktoś ma jakieś pomysły na temat problemu lub konfliktu? A może ktoś doświadczył czegoś podobnego?

(używam jQuery 1,83, choć nie powinny wymagać murowane jQuery w zależności od miejsca).

+0

Mam ten sam problem - czy kiedykolwiek rozwiązałeś go? – timshutes

+0

@timshutes Właśnie teraz wygląda na to, że zarówno skrypt, jak i kod zostaną użyte w szablonie bezpośrednio, tzn .: nie z wordpress enqueue_script. Zajmę się tym nieco dalej i zobaczę, czy potrafię zrozumieć, dlaczego to działa. Ale spróbuj na razie. – josh

+0

Grałem z tym na zawsze. Tam jest połączenie na linii 37 (gdzie pojawia się błąd) do funkcji z innej biblioteki. Zamierzam opublikować pełną odpowiedź i zobaczyć, czy to pomaga. – timshutes

Odpowiedz

32

miałem dokładnie ten problem. Domyślam się, że używasz tylko surowego pliku masonry.js z github. Ta wersja muru wymaga kilku innych wtyczek do poprawnego działania.

W szczególności pojawia się ten błąd, ponieważ nie zainstalowano Outlayer. Jeśli szukasz tylko muru i działasz, powinieneś pobrać pełny pakiet produkcyjny z masonry website here. Zawiera niezbędne wtyczki.

Mam nadzieję, że to pomoże!

+1

że * jest * co się działo. DZIĘKI – josh

+0

Tak, to samo dla mnie. Dzięki! – Astrotim

Powiązane problemy