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 идеи были бы замечательными. Спасибо!
- Извините - да, ошибка была ошибкой. Я предпоч ...
Ответ #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_javascriptundefined
.Итак, давайте посмотрим, где это объявлено:
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 вы думали, сделали.
- Никогда не копируйте код вслепую, если пытаетесь учиться. Прочтите и постарайтесь понять, что вы копируете. Если вы не знаете, ...
Ответ #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');
});
Спасибо
-
4
-
7
-
6
-
1
-
3
-
5
-
1
-
2
-
5
-
3
-
5
-
2
-
1
-
7
-
5
-
1
-
1
-
5
-
1
-
8
-
4
-
3
-
1
-
1
-
9
-
6
-
1
-
2
-
2
-
6
-
2
-
1
-
2
-
1
-
2
-
2
-
3
-
4
-
2
-
14
-
5
-
2
-
2
-
2
-
2
-
1
-
4
-
8
-
1
-
5