Backbone.Events eventsApi,为什么当name不是真值时返回true

时间:2014-06-30 07:28:28

标签: javascript backbone.js

var eventsApi = function(obj, action, name, rest) {
  if (!name) return true;

  // code ...

  return true;
};

我不知道为什么这里的代码在!name时返回true。如果我使用可能未定义的变量绑定事件,则事件将绑定在obj上。

1 个答案:

答案 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;
},