我有一些深度多层次的 JSON 响应数据。但是,我只需要在一步一步的向导样式页面中随时检索其中的一部分。在向导的第一步中,需要一个顶级对象category_a
(其中包含一个对象数组),在下一步中,将使用另一个顶级对象category_b
,依此类推。
在每一步,主干都会创建几个ProductView
视图并附加到一个 div #photo_list
。每个ProductView
视图都将使用img
数组中元素的对象。
问题:我应该如何一次访问一个顶级对象,给定下面显示的我的模板文件(可以编辑/改进),我试图使其尽可能简单。
示例 JSON 响应
对象名称category_a
和对象数量可能会有所不同
{"category_a":[
{"product_id":6283,
"img":"http:\/\/www.mysite.com\/img\/6283_5e093.jpg"},
{"product_id":6284,
"img":"http:\/\/www.mysite.com\/img\/6284_5e093.jpg"}
],
"category_b":[
{"product_id":6283,
"img":"http:\/\/www.mysite.com\/img\/6283_5e093.jpg"},
{"product_id":6284,
"img":"http:\/\/www.mysite.com\/img\/6284_5e093.jpg"}
]
}
Backbone.js 代码
productList
当前包含整个 JSON 响应
ProductCollection = Backbone.Collection.extend({
url: '/api/someurl',
model: Product
});
ProductListView = Backbone.View.extend({
el: '#photo_list',
initialize: function() {
this.collection.bind('reset', this.render, this);
},
render: function() {
this.collection.each(function(product, index){
$(this.el).append(new ProductView({ model: product }).render().el);
}, this);
return this;
}
});
ProductView = Backbone.View.extend({
tagname: 'div',
className: 'photo_box',
template: _.template($('#tpl-PhotoListItemView').html()),
render: function() {
this.$el.html(this.template( this.model.toJSON() ));
return this;
}
});
创建集合+视图
this.productList = new ProductCollection();
var self = this;
self.productListView = new ProductListView({ collection: self.productList });
this.productList.fetch();
模板片段
<div class="photo_container">
<img src="<%= img %>" class='photo' />
</div>