Backbone.js: `rozszerzenie` undefined?


103

Dopiero zaczynam korzystać z Backbone.js. Po prostu dołączenie Backbone (wersje deweloperskie / produkcyjne) powoduje błąd:

Uncaught TypeError: Cannot call method 'extend' of undefined w linii 128:

// Attach all inheritable methods to the Model prototype
_.extend(Backbone.Model.prototype, Backbone.Events, 

Pytanie: Czy łączysz go z innymi bibliotekami JS oraz Backbone? Czy próbowałeś sprawdzić, czy bez nich nadal występuje błąd?
Spudley

To zupełnie nowa aplikacja Rails; Nawet nie ładuję jQuery! :)
Matt Darby

Odpowiedzi:


216

Problem polegał na tym, że nie ładowałem underscore.js. Całkowicie tęskniłem za tą zależnością w dokumentach. Duh.

Dalsze wyjaśnienie z @tjorriemorrie: miałem podkreślenie, ale załadowano w niewłaściwej kolejności, najpierw załaduj podkreślenie (domyślam się, co oznacza „zależność” :)


Dalsze wyjaśnienie na wypadek, gdyby nie było to oczywiste. Kolejność ładowania rzeczy w JavaScript odnosi się do kolejności, w jakiej pojawiają się na stronie. Aby najpierw załadować podkreślenie, upewnij się, że tag skryptu zawierający go znajduje się przed tagiem ładującym szkielet. Lubię to:

<script src="underscore-1.4.4-min.js"></script>
<script src="backbone-1.0.0-min.js"></script>

2
Dziękuję bardzo, byłam zdziwiona, co robię źle i dlaczego nie mogę nawet załadować kręgosłupa!
Victor Farazdagi,

22
Miałem podkreślenie, ale załadowałem w złej kolejności, pierwszy załaduj podkreślenie (zgadnij, że to właśnie oznacza 'zależność' :)
Tjorriemorrie

11
Ponad 4600 wyświetleń i 55 głosów pozytywnych później wydaje się, że wiele osób nie spełnia wymagań. Być może powinny być wyraźniejsze.
Xeoncross

@Matt Darby: czy możesz dodać komentarz Tjorriemorrie do odpowiedzi?
sumid

2

Jedyną twardą zależnością Backbone jest skrypt Underscore.js, który ładuje podkreślenie przed skryptem backbonejs


1

Kolejność jest również ważna. Otrzymałem ten sam błąd i nie został on rozwiązany, dopóki nie podałem underscore.js przed backbone.js.

<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js" type="text/javascript"></script>
  <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js" type="text/javascript"></script>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.