backbone.js:无法从父视图中触发自定义视图并将子视图绑定到它
问题描述:
我有一个父骨干视图,它在其渲染方法中创建了一个新的骨干视图。backbone.js:无法从父视图中触发自定义视图并将子视图绑定到它
var appView = Backbone.View.extend({
...
render: function() {
preview = new previewDataView({model: model, el: $el.find('.preview-container')});
}
});
我希望能够在appView
触发一个自定义事件,并有previewDataView
绑定到它 - 这可能吗? previewDataView
没有收到事件时,我尝试了。思考?
答
两种方式,我认为你可以做到这一点。首先,将父项传递给子视图。其次,创建一个处理事件触发的eventAggregator。
FIRST:
你可以通过APPVIEW到previewDataView作为一个选项。
preview = new previewDataView({ // your options, 'parent':this });
在你previewDataView你会绑定到父自定义事件,像这样:
this.parent = this.options.parent;
this.parent.bind('eventName', this.onEvent, this);
第二:(刚刚获悉这一技术)
您可以创建一个eventAggregator,可以帮助你的看法订阅以及取消订阅针对彼此的事件。下面是对堆栈解释对此进行了详细一个很好的答案:fire an event from one view to another in backbone
在评论,@布赖恩Genisio采取了一步,包括这在他的代码:
Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);
已经在开始本次运行的代码和每个视图都可以访问eventAggregator,这将成为您需要跨视图触发和接收的事件的中心中心。你会使用这样的:
// Parent View
this.eventAggregator.trigger('someEvent');
// Child View
this.eventAggregator.bind('someEvent', this.function, this);
有了这个,你不必需要访问对方的事件触发和听取意见之间明确地传递参考。这种方法对我来说非常方便。 :-)
对我来说也是哈哈,很好的解释btw ..在您的backbone.js项目变得更加复杂的视图和转换之后,这些事情真的有助于找出一种处理类似事件的模式方式。 – mateusmaso 2012-04-29 07:39:41