javascript - ListenTo在Backbone中的实现

标签 javascript backbone.js

所以我不确定这一行是做什么的

      obj.on(name, typeof name === 'object' ? this : callback, this);

在 listenTo 的 Backbone.js 实现中。我也明白 listenTo 是一种让一个对象在另一个对象响应事件时起作用的方法,我还看到 Backbone 网站说使用 listenTo 的优点是如果我销毁原始对象,那么其他事件就会作用于该对象可以删除其他对象。这在 listenTo 中又是如何实现的?

谢谢

最佳答案

这是on的函数签名:

object.on(event, callback, [context])

event 是一个像“click”这样的事件名称或者像这样的事件映射:

{
    'click .button': 'handler1',
    'keydown': function(){}
}

因此在您发布的 listenTo 代码中,第一个参数是事件名称或事件映射。如果它是事件名称(类型为“字符串”),您希望将指定的回调作为第二个参数传递给 on。如果 name 是事件映射(类型为“object”),Backbone 传递 this - 它最终将用作上下文,即使它是作为回调传递的。

看一下 eventsApi 函数及其在 on 中的调用方式:

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));
      }
    }
// ... code in `on`:
eventsApi(this, 'on', name, [callback, context]) && callback)

假设 name 是一个事件映射(因此 typeof name ==='object' 为真)。对于事件映射的每个成员,我们使用以下参数调用 on:[key, name[key]].concat(rest)。因为 rest[callback, context] 我们得到四个参数。

但这比 on 接受的多了一个 - 最后一个需要是上下文,而不是 回调。这就是为什么 listenTothis 对象作为回调传递,使其成为事件处理程序的上下文。

listenTo 是一种相当新的方法,所以我假设这就是变量名称没有意义的原因。


当一个 View 被删除时——可能是在删除模型之后——remove 方法调用 View 上的stopListening。如果您不向它传递任何参数,该函数只会在所有处理程序上调用 off:

for (var id in listeners) {
    listeners[id].off(null, null, this);
}

关于javascript - ListenTo在Backbone中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133762/

相关文章:

javascript - 从 requirejs 迁移到 es6 导入

javascript - 尝试连接到 SignalR 时出现错误 204

javascript - 如何解析包含冒号的 JSON 对象

javascript - 在backbone.js中获取后如何查看模型数据

javascript - 主干删除 View 和 DOM 节点

javascript - 给定字典和字母列表,让程序学习生成有效单词 | Javascript

javascript - jQuery .prev - 我可以获取上一个之前的实例吗?

backbone.js - 在 Backbone Marionette 中在哪里使用事件聚合器?

javascript - backbone.js 查看事件未触发

javascript - 语义清理 HTML、CSS 和 JS 的一般技巧?