从概念上讲,eventsApi()
做了什么?它是Backbone专用的,但在4种公共事件方法中使用 - on()
,once()
,off()
和trigger()
。
在每一个中,如果它返回一个非真值,调用它的方法将“提前”退出。
它做的一件事是确定调用方法的第二部分是否会执行。如果name
不是真正的或不是复杂类型(对象或空格分隔的字符串),它将返回一个true,允许方法的第二部分运行。
概念上,eventsApi
函数的主要目的是什么,因为我试图描述它在功能上/逻辑上的作用?
eventsAPI
var eventsApi = function(obj, action, name, rest) {
if (!name) return true;
if (typeof name === 'object') {
for (var key in name) {
obj[action].apply(obj, [key, name[key]].concat(rest));
}
} else if (eventSplitter.test(name)) {
var names = name.split(eventSplitter);
for (var i = 0, l = names.length; i < l; i++) {
obj[action].apply(obj, [names[i]].concat(rest));
}
} else {
return true;
}
};
答案 0 :(得分:1)
与source中的评论一样,它实现了事件API更精彩的用途。
// Implement fancy features of the Events API such as multiple event
// names `"change blur"` and jQuery-style event maps `{change: action}`
// in terms of the existing API.
因此,当您将Events API与事件映射一起使用时:
book.on({
"change:title": titleView.update,
"change:author": authorPane.update,
"destroy": bookView.remove
});
eventsApi
函数检测到输入是一个对象,并再次为传入的每个属性调用on
。
它处理的另一种情况是空格分隔的事件:
book.on("change:title change:author", ...);
在这种情况下,eventsApi
函数会检测到这种情况,并再次为传入的每个事件调用on
一次。