Backbone.js: `extend` non défini?

103

Premiers pas avec Backbone.js. Le simple fait d'inclure Backbone (versions dev / production) provoque l'erreur:

Uncaught TypeError: Cannot call method 'extend' of undefined à la ligne 128:

// Attach all inheritable methods to the Model prototype
_.extend(Backbone.Model.prototype, Backbone.Events, 
Matt Darby
la source
Question: Le combinez-vous avec d'autres bibliothèques JS ainsi qu'avec Backbone? Avez-vous essayé de voir si vous obtenez toujours l'erreur sans eux?
Spudley
C'est une toute nouvelle application Rails; Je ne charge même pas jQuery! :)
Matt Darby

Réponses:

216

Le problème était que je ne chargeais pas underscore.js. J'ai totalement manqué cette dépendance dans les documents. Duh.

Précisions supplémentaires de @tjorriemorrie: j'avais un trait de soulignement, mais chargé dans le mauvais ordre, commencez par charger le trait de soulignement (je suppose que c'est ce que signifie `` dépendance '' :)


Clarification supplémentaire juste au cas où cela ne serait pas évident. L'ordre dans lequel les éléments sont chargés en JavaScript est lié à l'ordre dans lequel ils apparaissent sur la page. Pour charger d'abord le trait de soulignement, assurez-vous que la balise de script qui le contient précède celle qui charge le backbone. Comme ça:

<script src="underscore-1.4.4-min.js"></script>
<script src="backbone-1.0.0-min.js"></script>
Matt Darby
la source
2
Merci beaucoup, j'étais perplexe sur ce que je fais de mal et pourquoi je ne peux même pas charger la dorsale!
Victor Farazdagi
22
J'avais un trait de soulignement, mais chargé dans le mauvais ordre, commencez par charger le trait de soulignement (je suppose que c'est ce que signifie `` dépendance '' :)
Tjorriemorrie
11
Plus de 4600 vues et 55 votes positifs plus tard, il semble que beaucoup de gens ne répondent pas aux exigences. Peut-être devraient-ils être plus prononcés.
Xeoncross
@Matt Darby: pourriez-vous ajouter le commentaire de Tjorriemorrie dans la réponse?
sumid
2

Backbone seule la dépendance dure est Underscore.js charge le script underscorejs avant le script backbonejs

Somnath Kokane
la source
1

L'ordre est également important. J'ai eu la même erreur et elle n'a été résolue que lorsque j'ai donné le underscore.js avant 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>
Haris Np
la source