Backbone.js 设置选定单个视图的最佳方法(应取消选择其他视图)
所以我想做的是: 我有一个收藏列表视图Backbone.js 设置选定单个视图的最佳方法(应取消选择其他视图),backbone.js,event-handling,marionette,collectionview,Backbone.js,Event Handling,Marionette,Collectionview,所以我想做的是: 我有一个收藏列表视图 项目 项目视图 现在我使用的方法是,当我单击item时,它处理itemview中的单击并添加所选的类,我使用$('.selected').removeClass('selected') 但我觉得这样做不对,我已经想了好几次,我如何才能做到最好。 也许我应该用事件 想法/实现?如果每个视图对应一个模型,那么我可能会选择该模型,并让视图对模型上的更改事件作出反应: var MyModel = Backbone.Model.extend({ select:
项目
项目视图
现在我使用的方法是,当我单击item时,它处理itemview中的单击并添加所选的类,我使用$('.selected').removeClass('selected')代码>
但我觉得这样做不对,我已经想了好几次,我如何才能做到最好。
也许我应该用事件
想法/实现?如果每个视图对应一个模型,那么我可能会选择该模型,并让视图对模型上的更改事件作出反应:
var MyModel = Backbone.Model.extend({
select: function () {
// I add select methods instead of having this
// set directly on the model in case I want to
// control the event firing, for example if I
// want to suppress it
this.set({ selected: true });
},
deselect: function () {
this.set({ selected: false });
}
});
// where-ever my view is defined:
var MyView = Marionette.ItemView.extend({
initialize: function () {
this.listenTo(this.model, 'change:select', this.toggleSelected);
},
toggleSelected: function () {
this.$el.toggleClass('selected');
}
});
这将保持模型状态的解耦,并将视图行为的范围也限定为视图的关注点。如果您担心保持类的选定状态与模型的选定状态同步,您也可以自己从模型选择/取消选择方法触发更改,将选定状态作为触发器方法中的附加选项传递:
select: function () {
this.trigger('selected', { selected: true });
}
toggleSelected: function (options) {
this.$el.toggleClass('selected', options.selected);
}
或者,您可以在调用toggleClass时实际查询模型的状态:
toggleSelected: function () {
this.$el.toggleClass('selected', this.model.get('selected'));
}