2011-02-02 16 views
101

Recién comenzando con Backbone.js. Simplemente incluyendo (versiones ya sea dev/producción) Backbone provoca el error:Backbone.js: `extend` undefined?

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, 
+0

Pregunta: ¿Lo está combinando con otras bibliotecas JS, así como con Backbone? ¿Has intentado ver si todavía obtienes el error sin ellos? – Spudley

+0

Es una nueva aplicación de Rails; ¡Ni siquiera estoy cargando jQuery! :) –

+2

Me encanta que esta sea una de las preguntas más votadas en la etiqueta backbone.js – theycallmemorty

Respuesta

211

El problema era que no estaba cargando underscore.js. Me perdí totalmente esa dependencia en los documentos. Duh.

más aclaraciones de @tjorriemorrie: había subrayado, pero cargada en el orden equivocado, subrayado primera carga (supongo que eso es lo que la 'dependencia' significa :)


más aclaraciones en caso de que esto no es no es 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 subrayado primero, asegúrese de que la etiqueta del script que lo incluye se encuentre antes de la troncal de carga. De esta manera:

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

Muchas gracias, me quedé desconcertada de lo que estoy haciendo mal, ¡y de por qué ni siquiera puedo cargar la red troncal! –

+22

Tenía un guión bajo, pero se cargó en el orden incorrecto, primero cargue el guión bajo (supongo que eso es lo que significa 'dependencia' :) – Tjorriemorrie

+11

4,600+ vistas y 55 votaciones más tarde parece que a mucha gente le faltan los requisitos. Quizás deberían ser más pronunciados. – Xeoncross

2

Backbone única dependencia duro es Underscore.js carga underscorejs guión antes backbone.js guión

1

La orden también es importante. Obtuve el mismo error y no se resolvió hasta que di el underscore.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>