2014-04-02 30 views
2

我想在呈現視圖時觸發呈現事件。現在如何使用「限定符」觸發Backbone事件

function Renderer() { 
    _.extend(this, Backbone.Events); 
}; 

Renderer.prototype.render = function(view, model) { 
    this.trigger('render:before'); 

    // Do some checks to see how 
    // we should render the view 
    // and then call render 

    this.trigger('render:after'); 
}; 

var renderer = new Renderer(); 

我可以在Renderer事件註冊,但必須使用全名。即這個工程:

renderer.on('render:before', function() { console.log("before rendering"); }); 
renderer.on('render:after', function() { console.log("after rendering"); }); 
renderer.on('all', function() { console.log("All events from renderer"); }); 

但這並不:

renderer.on('render', function() { console.log("Any rendering events"); }); 

我希望最後一個等同於註冊上渲染all事件。

有沒有辦法讓聽着render等於聽同時收聽render:beforerender:after

+0

這與http://stackoverflow.com/q/20163043/479863是一樣的嗎? –

+0

@ muistooshort這是相反的。我不想在'渲染'上註冊時收到所有事件。這個問題似乎是要觸發所有以「限定詞」登記的聽衆。 –

回答

3

命名空間的事件使用冒號的名字是just a convention

如果您有大量的頁面上的不同事件中, 慣例是使用冒號它們的命名應該:「民意調查:啓動」 ,或 「更改:選擇」。

source code of Events.trigger顯示該事件處理程序被稱爲中搜索該事件的全名,獨立於它是否包含一個冒號,或者不:

var events = this._events[name]; 
... 
if (events) triggerEvents(events, args); 

您可以:

  • 定義並觸發一個'all'事件,
  • 通過調用trigger用空格觸發多個事件處理程序 - 限制事件名稱列表,或
  • 在backbone.js中修改Events.trigger的源代碼以添加此功能。