Backbone.js: `extend` undefined?

103

Apenas começando com o Backbone.js. A simples inclusão do Backbone (nas versões de desenvolvimento / produção) causa o erro:

Uncaught TypeError: Cannot call method 'extend' of undefined na linha 128:

// Attach all inheritable methods to the Model prototype
_.extend(Backbone.Model.prototype, Backbone.Events, 
Matt Darby
fonte
Pergunta: Você está combinando com alguma outra biblioteca JS, bem como com o Backbone? Você já tentou ver se ainda obtém o erro sem eles?
Spudley
É um aplicativo Rails totalmente novo; Não estou nem carregando o jQuery! :)
Matt Darby

Respostas:

216

O problema era que eu não estava carregando underscore.js. Eu perdi totalmente essa dependência nos documentos. Duh.

Esclarecimento adicional de @tjorriemorrie: Eu tinha sublinhado, mas carregado na ordem errada, primeiro carregue o sublinhado (acho que é isso que 'dependência' significa :)


Esclarecimento adicional apenas no caso de não ser óbvio. A ordem em que as coisas são carregadas no JavaScript está relacionada à ordem em que aparecem na página. Para carregar o sublinhado primeiro, certifique-se de que a tag do script que o inclui venha antes do backbone de carregamento. Como isso:

<script src="underscore-1.4.4-min.js"></script>
<script src="backbone-1.0.0-min.js"></script>
Matt Darby
fonte
2
Muito obrigado, fiquei intrigado com o que estou fazendo de errado, e por que não consigo nem carregar o backbone!
Victor Farazdagi
22
Eu tinha sublinhado, mas carregado na ordem errada, primeiro carregue o sublinhado (acho que é isso que 'dependência' significa :)
Tjorriemorrie
11
Mais de 4.600 visualizações e 55 votos positivos depois, parece que muitas pessoas não atendem aos requisitos. Talvez devessem ser mais pronunciados.
Xeoncross
@Matt Darby: você poderia adicionar o comentário de Tjorriemorrie na resposta?
verão de
2

A dependência única do backbone é o script Underscore.js carregar o script underscorejs antes do script backbonejs

Somnath Kokane
fonte
1

A ordem também é importante. Recebi o mesmo erro e ele não foi resolvido até que eu fornecesse o underscore.js antes do 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
fonte