我有一个父视图ProductListView
包含多步骤向导中的多个子视图ProductView
。当用户点击ProductView
时,其模型的id应该存储在某个地方(可能位于一个数组中),以便将其发送回服务器端进行处理。将视图添加到数组(backbone.js)
问题:我应该在哪里存储用户点击的ProductView
的id
?我试图将它存储在父视图ProductListView
中,但似乎无法从子视图ProductView
的父视图中访问数组selectedProducts
。
这是正确的方法吗?这应该怎么做?
型号
ProductCollection = Backbone.Collection.extend({
model: Product,
url: '/wizard'
});
父视图
ProductListView = Backbone.View.extend({
el: '#photo_list',
selectedProducts: {}, // STORING SELECTED PRODUCTS IN THIS ARRAY
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',
events: {
'click': 'toggleSelection'
},
template: _.template($('#tpl-PhotoListItemView').html()),
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
// ADDS ITS MODEL'S ID TO ARRAY
toggleSelection: function() {
this.parent.selectedProducts.push(this.model.id);
console.log(this.parent.selectedProducts);
}
});
我也会采取@ dbaseman的方法,并让每个模型都有一个'selected'属性。然后在最后,您只需执行'collection.filter(function(product){return product.selected === true;})'来获取所选产品模型的数组。如果你愿意的话,你也可以很容易地'摘取()'ID。但骨干就这样,你推送数组的方式也没有错。只需将你的父视图引用给你的孩子。 'var childView = new ProductView({'parent':parentView});'你可以访问你的父视图数组。 – jmk2142