var eventsApi = function(obj, action, name, rest) {
if (!name) return true;
// code ...
return true;
};
我不知道为什么这里的代码在!name时返回true。如果我使用可能未定义的变量绑定事件,则事件将绑定在obj上。
答案 0 :(得分:0)
参数'name'在这里表示要绑定到对象的事件名称(第一个参数)。如果name参数不支持多事件注册,函数eventsApi将返回true(Backbone的事件API仅支持字符串和对象表示法格式,例如:“change click”,{change:action,click:action2})。
如果传递非字符串或非对象名称参数,则事件api将为“单个事件”注册事件处理程序。在您的情况下,您尝试注册名为undefined的自定义事件,而backbone将将其视为单个事件处理程序注册。
总之,返回的布尔值确定事件寄存器是否需要进行“多事件注册”。
....
on: function(name, callback, context) {
//multi-events registration will be processed if the eventsApi function call return 'false'
if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
this._events || (this._events = {});
var events = this._events[name] || (this._events[name] = []);
events.push({callback: callback, context: context, ctx: context || this});
return this;
},