Uncaught TypeError: undefined не является функцией »- Приложение для начинающих Backbone.js

Я настраиваю довольно простое приложение 9X_vanillajs с магистралью и получаю сообщение об ошибке.

Uncaught TypeError: undefined is not a function example_app.js:7 ExampleApp.initialize example_app.js:7 (anonymous function) 

Вот 9X_ruby-on-rails-3 где ошибка появляется в Chrome Inspector 9X_javascript (файл инициализации - example_app.js):

var ExampleApp = { Models: {}, Collections: {}, Views: {}, Routers: {}, initialize: function() { var tasks = new ExampleApp.Collections.Tasks(data.tasks); new ExampleApp.Routers.Tasks({ tasks: tasks }); Backbone.history.start(); } }; 

Вот 9X_ecmascript файл моих задач index.haml

- content_for :javascript do - javascript_tag do ExampleApp.initialize({ tasks: #{raw @tasks.to_json} }); = yield :javascript 

модели / task.js

var Task = Backbone.Model.extend({}); 

collections 9X_vanilla-javascript / tasks.js

var Tasks = Backbone.Collection.extend({ model: Task, url: '/tasks' }); 

роутеры / tasks.js

ExampleApp.Routers.Tasks = Backbone.Router.extend({ routes: { "": "index" }, index: function() { alert('test'); // var view = new ExampleApp.Views.TaskIndex({ collection: ExampleApp.tasks }); // $('body').html(view.render().$el); } }); 

И вот доказательство 9X_javascript того, что я вызываю все файлы (как мне кажется):

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Любые 9X_ror идеи были бы замечательными. Спасибо!

44
2

  • Извините - да, ошибка была ошибкой. Я предпоч ...
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Uncaught TypeError: undefined не является функцией »- Приложение для начинающих Backbone.js

Uncaught TypeError: undefined не является 9X_ruby-on-rails функцией example_app.js: 7

Это сообщение 9X_js об ошибке рассказывает всю историю. В этой 9X_rails строке вы пытаетесь выполнить функцию. Однако 9X_rails3 все, что выполняется, не является функцией! Вместо 9X_vanillajs этого это undefined.

Так что находится в строке 7 9X_backbone example_app.js? Выглядит так:

var tasks = new ExampleApp.Collections.Tasks(data.tasks); 

В этой строке выполняется 9X_javascript только одна функция. Мы нашли проблему! ExampleApp.Collections.Tasks - это 9X_javascript undefined.

Итак, давайте посмотрим, где это объявлено:

var Tasks = Backbone.Collection.extend({ model: Task, url: '/tasks' }); 

Если 9X_backbonejs это весь код для этой коллекции, то основная 9X_js причина прямо здесь. Вы назначаете конструктор 9X_javascript-library глобальной переменной с именем Tasks. Но вы никогда 9X_vanillajs не добавляете его к объекту ExampleApp.Collections - в том месте, которое 9X_vanilla-javascript вы ожидаете позже.

Измените это на это, и 9X_js я уверен, что у вас все будет хорошо.

ExampleApp.Collections.Tasks = Backbone.Collection.extend({ model: Task, url: '/tasks' }); 

Видите, насколько 9X_vanillajs важны собственные имена и номера строк для 9X_backbonejs выяснения этого вопроса? Никогда не считайте 9X_ruby-on-rails ошибки двоичными (работает она или нет). Вместо 9X_js этого прочтите ошибку, в большинстве случаев 9X_js само сообщение об ошибке дает вам важные 9X_vanilla-javascript подсказки, которые вам нужно проследить, чтобы 9X_ruby-on-rails найти реальную проблему.


В Javascript, когда 9X_js вы выполняете функцию, она оценивается следующим 9X_javascript образом:

expression.that('returns').aFunctionObject(); // js execute -> expression.that('returns').aFunctionObject // what the JS engine does 

Это выражение может быть сложным. Поэтому, когда 9X_ruby-on-rails вы видите undefined is not a function, это означает, что выражение 9X_backbone.js не вернуло объект функции. Итак, вам нужно 9X_backbone выяснить, почему то, что вы пытаетесь выполнить, не 9X_ror является функцией.

В данном случае это произошло 9X_vanilla-javascript потому, что вы не положили то, что, как 9X_javascript-library вы думали, сделали.

85
1

  • Никогда не копируйте код вслепую, если пытаетесь учиться. Прочтите и постарайтесь понять, что вы копируете. Если вы не знаете, ...

Ответ #2

Ответ на вопрос: Uncaught TypeError: undefined не является функцией »- Приложение для начинающих Backbone.js

У меня возникла такая же ошибка, как в следующем 9X_vanilla-javascript примере -

async.waterfall([function(waterCB) { waterCB(null); }, function(**inputArray**, waterCB) { waterCB(null); }], function(waterErr, waterResult) { console.log('Done'); }); 

В приведенной выше функции водопада 9X_ruby-on-rails-3 я принимаю параметр inputArray во второй функции водопада. Но этот inputArray не передан в 1-й функции водопада в waterCB.

Измените параметры вашей функции. Ниже приведен 9X_ror правильный пример.

async.waterfall([function(waterCB) { waterCB(null, **inputArray**); }, function(**inputArray**, waterCB) { waterCB(null); }], function(waterErr, waterResult) { console.log('Done'); }); 

Спасибо

1
0