我想在渲染 View 时触发渲染事件。
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
上注册事件,但我必须使用全名。 IE。这有效:
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"); });
我预计最后一个相当于注册渲染器的所有事件。
有没有办法让监听 render
等同于监听 render:before
和 render:after
?
最佳答案
使用冒号命名事件名称为 just a convention :
If you have a large number of different events on a page, the convention is to use colons to namespace them: "poll:start", or "change:selection".
source code of Events.trigger
显示要调用的事件处理程序是通过事件的全名搜索的,无论它是否包含冒号:
var events = this._events[name];
...
if (events) triggerEvents(events, args);
您可以:
- 定义并触发
'all'
事件, - 通过使用空格分隔的事件名称列表调用
trigger
来触发多个事件处理程序,或者 - 修改backbone.js中
Events.trigger
的源代码以添加此功能。
关于javascript - 如何使用 "qualifier"触发Backbone事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22803264/