如何使用"限定符"触发Backbone事件

时间:2014-04-02 06:33:44

标签: javascript backbone.js

我想在渲染视图时触发渲染事件。

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的内容?

1 个答案:

答案 0 :(得分:3)

使用冒号命名空间事件名称为just a convention

  

如果您在网页上有大量不同的事件,那么   约定是使用冒号命名它们:" poll:start",或   "变化:选择"

source code of Events.trigger表示要调用的事件处理程序由事件的全名搜索,而不管它是否包含冒号:

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

你可以:

  • 定义并触发'all'事件,
  • 通过使用以空格分隔的事件名称列表调用trigger来触发多个事件处理程序,或
  • 修改backbone.js中Events.trigger的源代码以添加此功能。