从概念上讲,eventsApi()
是做什么的?它对Backbone是私有的,但在4种公共事件方法中使用-on()
,once()
,off()
和trigger()
。
在每种方法中,如果它返回一个非真实的值,则调用它的方法将退出“ early”。
它要做的一件事是确定调用方法的第二部分是否将执行。如果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;
}
};
最佳答案
就像source中的注释一样,它实现了Events 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.
因此,当您将Event API与事件映射一起使用时:
book.on({
"change:title": titleView.update,
"change:author": authorPane.update,
"destroy": bookView.remove
});
eventsApi
函数检测到输入是一个对象,并为传入的每个属性再次调用on
。它处理的另一种情况是用空格分隔的事件:
book.on("change:title change:author", ...);
在这种情况下,
eventsApi
函数会检测到这种情况,并再次为传入的每个事件调用on
。关于javascript - 事件-eventsApi()的主要目的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15396097/