0

关于开/关,listenTo / stopListening 如何工作?

在控制台中,我正在试验这样的 Backbone 事件系统......

// works
Backbone.on('x', function(){console.log('x happened');})

// works
Backbone.trigger('x');

// works
Backbone.off('x');

// works
Backbone.once('x', function(){console.log('x happened');})

我正在尝试扩展我的示例以使用listenTo() 和stopListening()。

这些被列为控制类型的反转。有没有一种简单的方法来显示上面的用法?

从源代码来看,主要区别在于第一个参数需要是一个对象。

4

2 回答 2

1

它完全一样,只是它是控制反转:listenTo将事件绑定在侦听对象上,而不是触发对象上。这对于清理 View 事件处理程序非常有用,因为视图现在知道它正在侦听哪些事件,并且可以在它被删除时取消绑定它们。在原始系统中,只有触发对象(即模型)才能直接了解绑定事件。

这里有一个很好的概念解释。它显示了人们在它被添加到 Backbone 之前是如何做的。

在您的示例中,您实际上并没有“监听”对象,因为您的处理程序只是一个匿名函数。但它会类似于obj.listenTo(Backbone, "x", obj.alert);,其中alert的处理程序方法在哪里obj

于 2013-03-13T20:27:21.643 回答
0

因为 listenTo 和 stopListening 在不同的对象上工作,所以您需要创建另一个可以访问事件系统的对象。一种简单的方法是创建一个视图对象。

var View1 = new Backbone.View();

接下来设置一个监听器:

Backbone.listenTo(View1, 'x', function(){console.log('I heard x');});

现在触发 View1 上的事件

View1.trigger('x');

最后移除监听器

Backbone.stopListening(View1,'x');

这涵盖了事件系统的 6 种主要方法。

经过测试和工作...

于 2013-03-13T21:07:38.957 回答