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, 

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>

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


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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.