Backbone.js: `extension` undefined?

103

Только приступаем к работе с Backbone.js. Простое включение Backbone (версии для разработки или производства) вызывает ошибку:

Uncaught TypeError: Cannot call method 'extend' of undefined в строке 128:

// Attach all inheritable methods to the Model prototype
_.extend(Backbone.Model.prototype, Backbone.Events, 
Мэтт Дарби
источник
Вопрос: комбинируете ли вы его с любыми другими библиотеками JS, а также с Backbone? Вы пытались проверить, появляется ли ошибка без них?
Spudley 02
Это совершенно новое приложение Rails; Я даже jQuery не загружаю! :)
Мэтт Дарби

Ответы:

216

Проблема заключалась в том, что я не загружался underscore.js. Я полностью пропустил эту зависимость в документации. Ага.

Дальнейшее разъяснение от @tjorriemorrie: у меня было подчеркивание, но я загружал в неправильном порядке, первое подчеркивание загрузки (угадайте, что означает «зависимость» :)


Дальнейшие разъяснения на всякий случай, что это не очевидно. Порядок, в котором что-то загружается в JavaScript, связан с порядком отображения на странице. Чтобы сначала загрузить символ подчеркивания, убедитесь, что тег сценария, включающий его, стоит перед загрузочной магистралью. Как это:

<script src="underscore-1.4.4-min.js"></script>
<script src="backbone-1.0.0-min.js"></script>
Мэтт Дарби
источник
2
Большое вам спасибо, был озадачен, что я делаю не так и почему не могу загрузить даже магистраль!
Виктор Фараждаги
22
У меня был символ подчеркивания, но он загружен в неправильном порядке, первое подчеркивание при загрузке (угадайте, это то, что означает «зависимость» :)
Tjorriemorrie
11
4600+ просмотров и 55 голосов за позже, кажется, многие люди пропускают требования. Возможно, они должны быть более выраженными.
Xeoncross
@ Мэтт Дарби: не могли бы вы добавить в ответ комментарий Тьорриморри?
Sumid
2

Жесткая зависимость только для Backbone: Underscore.js загружает скрипт underscorejs перед скриптом backbonejs

Сомнатх Кокане
источник
1

Порядок тоже важен. Я получил ту же ошибку, и она не была устранена, пока я не дал underscore.js перед 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>
Харис Н.П.
источник