从概念上讲,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/

10-16 11:17