我们有一个商店的树层次结构。每个商店只能有一个父母,但可以有多个孩子。我们的api返回其嵌套的结果。
我们想要做的是拥有商店模型的集合,其中儿童是商店模型的另一个集合。
[{'name': 'store_a',
'children': [{'name': 'store_b',
'children': [{'name': 'store_c',
'children': []
}],
},
{'name': 'store_d',
'children': [],
}]
}]
我们有一个商店模型:
define([
'jquery',
'jquery',
'jCookie',
'underscore',
'backbone',
'require'
], function($, jQuery, cookie, _, Backbone) {
var StoreModel = Backbone.Model.extend({
initialize: function(){
if(this.get('children') instanceof Array){
console.log(this);
var child = new require('collections/stores')(new StoreModel(this.get('children')));
this.set('children', child);
}
}
});
return StoreModel;
});
这个商店模型应该获取fetch JSON(当我们调用collection.fetch()时),如果model.children是一个Array,那么它应该从这个创建一个Collection,因此递归地沿着树转向所有Arrays孩子们,收藏品。一旦从初始化模型返回,它应该将当前模型的'children'属性设置为集合。
该系列
define([
'jquery',
'underscore',
'backbone',
'models/store'
], function($, _, Backbone, storeModel){
var StoresCollection = Backbone.Collection.extend({
model: storeModel,
url: '/api/stores'
});
return StoresCollection;
});
漂亮的准系统('scuse the pun)
并且视图是
define([
'jquery',
'underscore',
'backbone',
'collections/stores',
'text!templates/stores/tree.html'
], function($, _, Backbone, StoreCollection, storeListTemplate){
var StoresListView = Backbone.View.extend({
el: $("#page"),
events: {
},
initialize: function(){
this.login();
_.bindAll(this, 'render', 'recurse');
this.collection = new StoreCollection();
this.collection.bind('reset', this.render);
this.collection.fetch();
console.log('initialize');
console.log(this.collection);
},
render: function(){
console.log("in render");
console.log(this.collection);
}
});
return StoresListView;
});
此时发生的事情是我得到了
Uncaught TypeError:Object [object DOMWindow]没有方法'_reset'
在第447行的backbone.js中。
我也尝试从集合中返回一个对象而不是'class',但这意味着我不断添加到同一个对象,因此每个recurse需要一个新的集合实例的递归函数不起作用
上述应该如何工作?我能做到吗?
干杯
标记