Backbone.js: ¿`extender` indefinido?

103

Recién comenzando con Backbone.js. El simple hecho de incluir Backbone (ya sea versiones de desarrollo / producción) provoca el error:

Uncaught TypeError: Cannot call method 'extend' of undefined en la línea 128:

// Attach all inheritable methods to the Model prototype
_.extend(Backbone.Model.prototype, Backbone.Events, 
Matt Darby
fuente
Pregunta: ¿Lo está combinando con otras bibliotecas JS además de Backbone? ¿Ha intentado ver si sigue apareciendo el error sin ellos?
Spudley
Es una nueva aplicación Rails; ¡Ni siquiera estoy cargando jQuery! :)
Matt Darby

Respuestas:

216

El problema era que no cargaba underscore.js. Extrañé totalmente esa dependencia en los documentos. Duh.

Más aclaración de @tjorriemorrie: tenía un guión bajo, pero lo cargué en el orden incorrecto, primero cargue el guión bajo (supongo que eso es lo que significa 'dependencia' :)


Aclaración adicional en caso de que esto no sea obvio. El orden en que se cargan las cosas en JavaScript se relaciona con el orden en que aparecen en la página. Para cargar el guión bajo primero, asegúrese de que la etiqueta del script que la incluye esté antes de la columna vertebral de carga. Me gusta esto:

<script src="underscore-1.4.4-min.js"></script>
<script src="backbone-1.0.0-min.js"></script>
Matt Darby
fuente
2
¡Muchas gracias, estaba desconcertado por lo que estoy haciendo mal y por qué ni siquiera puedo cargar la columna vertebral!
Victor Farazdagi
22
Tenía guión bajo, pero lo cargué en el orden incorrecto, primero cargue el guión bajo (supongo que eso es lo que significa 'dependencia' :)
Tjorriemorrie
11
Más de 4.600 visitas y 55 votos positivos más tarde, parece que a muchas personas les faltan los requisitos. Quizás deberían ser más pronunciados.
Xeoncross
@Matt Darby: ¿podrías agregar el comentario de Tjorriemorrie en la respuesta?
sumid
2

La única dependencia de backbone es Underscore.js cargar el script underscorejs antes del script backbonejs

Somnath Kokane
fuente
1

El orden también es importante. Recibí el mismo error y no se resolvió hasta que di el subrayado.js antes de 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
fuente