2014-12-05 66 views
0

我使用骨幹JS子視圖火災事件。 假設我有所謂的「childView」子視圖,並呼籲「parentView」父視圖。寫在Backbone.js的

parentView = Backbone.View.extend({ 
    render: function() { 
    new childView().render(); 
    } 
}) 

childView = Backbone.View.extend({ 
    render: function() { 

    }, 
    events: { 
    'click .abc' : 'fireEvent' 
    } 
}) 

我需要調用父視圖中childView中寫入的點擊事件。

回答

1

最簡單的方法是使用Backbone.View的實例。 Backbone.ViewBackbone.Events,給你可能使用它作爲事件聚合混合。

例如,對於你的情況:

childView = Backbone.View.extend({ 
    render: function() { 

    }, 
    events: { 
    'click .abc' : 'fireEvent' 
    }, 
    fireEvent: function (e) { 
     this.trigger('child:event:fired', e); 
    } 
}); 

而且在父視圖:

parentView = Backbone.View.extend({ 
    render: function() { 
    this.childView = new childView(); 
    this.childView.on('child:event:fired', this.onChildEvent, this); 
    childView .render(); 
    }, 
    onChildEvent: function (e) { 
     console.log("child view event"); 
    }, 
    closeThisView: function() { 
    this.childView.off('child:event:fired', this.onChildEvent, this); 
    } 
}) 

這種方式,您可以訂閱childView事件,但你需要所有訂閱手動管理解除綁定。


針對同一問題的另一個解決方案可以通過爲兩個視圖聲明全局事件聚合器來找到。

var vent = _.extend({}, Backbone.Events); 

而在你的意見只是觸發事件需要用vent.trigger和訂閱/與vent.(on/off)方法退訂。