主干.js未捕获的类型错误:对象 [对象数组] 没有方法“on”
Backbone.js Uncaught TypeError: Object [object Array] has no method 'on'
谁能帮我解决这个问题?我不知道出了什么问题。
从 json 文件获取数据:
this.categoryTrees = new CategoryTrees();
this.categoryTrees.getCategoryTreesFromJSON();
this.categories = new Categories();
this.categories.getCategoriesFromJSON();
为其创建视图:
//view for startscreen
this.startscreenView = new StartscreenView({collection: this.categoryTrees});
//view for subjectsList
this.subjectsListView = new SubjectsListView({collection: this.categories.where({ category_tree : "onderwerpen" }) });
第二个带有 where 子句的给了我一个错误:未捕获的类型错误:对象 [对象数组] 没有方法 'on'
当我不放置 where 子句时,它工作得很好。在控制台中,我可以毫无问题地执行 where 功能。
我在这里错过了什么吗?
where
方法将返回集合中与传递的属性匹配的所有模型的数组。 因此,它不会返回Backbone.Collection
因此您会得到on
未定义的错误。
您需要从where
的结果创建一个新的Categories
集合:
this.subjectsListView = new SubjectsListView({
collection: new Categories(
this.categories.where({ category_tree : "onderwerpen" }))
});
找到了一个合适的解决方案。在启动主干应用程序之前,我在一个新函数 loadDataAndStartApp() 中检索 JSON 数据。此函数在 dom 准备就绪时加载,加载 JSON 后,它将启动主干应用。这样,您就可以确保拥有所有可用数据。结合nemesv所说的关于创建一个新的类别函数以及他回答的其他建议,我为这个问题制定了以下答案。
var AppRouter = Backbone.Router.extend({
routes: {
"": "startscreen",
"Onderwerpen": "subjectsList"
},
initialize: function (options) {
this.categories = new Categories( options.categories );
this.subjectsListView2 = new SubjectsListView({
collection: new Categories(
this.categories.where({ parent : null, name : "Evenwicht" })
)
});
//view for spacesList
},
startscreen: function () {
$('#app').html(this.startscreenView.render().el);
},
subjectsList: function () {
$('#app').append(this.subjectsListView2.render().el);
},
});
function loadDataAndStartApp(){
var categories = []
// LOAD APP DATA
$.ajax({
url : './catalogue.json',
dataType : 'json'
}).done(function(data){
console.log('Catalogue retrieved');
// GET CATEGORIES
_.each(data.categories, function( categorieObj ){
var categorieName = _.keys(categorieObj)[0],
categorieAttributes = categorieObj[categorieName];
categories.push( categorieAttributes );
});
// START APP
var app = new AppRouter({
categories : categories
});
Backbone.history.start();
});
}
$(function(){
// ON DOM READY
loadDataAndStartApp();
});
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序