ChatGPT解决这个技术问题 Extra ChatGPT

Backbone.js: `extend` undefined?

Just getting started with Backbone.js. Simply including Backbone (either dev/production versions) causes the error:

Uncaught TypeError: Cannot call method 'extend' of undefined on Line 128:

// Attach all inheritable methods to the Model prototype
_.extend(Backbone.Model.prototype, Backbone.Events, 
Question: Are you combining it with any other JS libraries as well as Backbone? Have you tried seeing if you still get the error without them?
It's a brand new Rails app; I'm not even loading jQuery! :)

J
Juan Cortés

The issue was that I wasn't loading underscore.js. I totally missed that dependency in the docs. Duh.

Further clarification from @tjorriemorrie: I had underscore, but loaded in the wrong order, first load underscore (guess that is what 'dependency' means :)

Further Clarification just in case this isn't obvious. The order that things are loaded in JavaScript relates to the order the show up on the page. To load underscore first, be sure that the script tag including it comes before the one loading backbone. Like this:

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

Thank you so much, was puzzled what I am doing wrong, and why I can't even load the backbone!
I had underscore, but loaded in the wrong order, first load underscore (guess that is what 'dependency' means :)
4,600+ views and 55 upvotes later it seems lots of people are missing the requirements. Perhaps they should be more pronounced.
@Matt Darby : could you add the comment from Tjorriemorrie into the answer?
S
Somnath Kokane

Backbone only hard dependency is Underscore.js load underscorejs script before backbonejs script


H
Haris Np

The order is also important. I got the same error and it was was not resolved until I gave the underscore.js before 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>