我的Backbone视图包含子视图,每个视图都可以保持“活动”状态(仅click
或contextmenu
)。我需要从父视图获取对该活动子视图的视图引用。这样做的正确方法是什么?
我的视图层次结构如下所示:
var OuterView = Backbone.View.extend({
initialize: function() {
this.children = {};
this.child = new Backbone.View();
this.children[this.child.cid] = this.child;
},
render: function() {
this.$el.html('<div data-view-cid="' + this.child.cid + '"></div>');
_.each(this.children, function(view, cid) {
this.$('[data-view-cid="' + cid + '"]').replaceWith(view.el);
}, this);
}
};
答案 0 :(得分:4)
我更喜欢的方法不是拥有活动和非活动视图,而是仅渲染活动视图,并在不需要时删除它们。
换句话说,处理状态的最简单方法是使事情无状态。
答案 1 :(得分:0)
最简单的解决方案是委托父视图来聆听&#39;点击div&#39;并在回调中通过$(event.currentTarget).closest('[data-view-cid]')
子视图不应该知道父视图以避免创建僵尸,否则你可能不得不清理引用。