2012-03-15 88 views
0

我有一个父骨干视图,它在其渲染方法中创建了一个新的骨干视图。backbone.js:无法从父视图中触发自定义视图并将子视图绑定到它

var appView = Backbone.View.extend({ 
    ... 
    render: function() { 
     preview = new previewDataView({model: model, el: $el.find('.preview-container')}); 
    } 
}); 

我希望能够在appView触发一个自定义事件,并有previewDataView绑定到它 - 这可能吗? previewDataView没有收到事件时,我尝试了。思考?

回答

2

两种方式,我认为你可以做到这一点。首先,将父项传递给子视图。其次,创建一个处理事件触发的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); 

有了这个,你不必需要访问对方的事件触发和听取意见之间明确地传递参考。这种方法对我来说非常方便。 :-)

+0

对我来说也是哈哈,很好的解释btw ..在您的backbone.js项目变得更加复杂的视图和转换之后,这些事情真的有助于找出一种处理类似事件的模式方式。 – mateusmaso 2012-04-29 07:39:41

相关问题