我有一个包含回调函数数组的静态类,然后我有一些其他类用于与这个静态类交互......
这是静态类的一个简单示例:
var SomeStaticInstance = {};
(function(staticInstance) {
var callbacks = {};
staticInstance.addCallback = function(callback) { callbacks.push(callback); }
staticInstance.callAllCallbacks = function() { /* call them all */ }
}(SomeStaticInstance));
然后这是与它交互的其他类的示例:
function SomeClassOne() {
this.addCallbackToStaticInstance = function() { SomeStaticInstance.addCallback(this.someCallback); }
this.someCallback = function() { /* Do something */ }
this.activateCallbacks = function() { SomeStaticInstance.callAllCallbacks(); }
}
function SomeClassTwo() {
this.addCallbackToStaticInstance = function() { SomeStaticInstance.addCallback(this.someOtherCallback); }
this.someOtherCallback = function() { /* Do something else */ }
this.activateCallbacks = function() { SomeStaticInstance.callAllCallbacks(); }
}
现在我遇到的问题是,当我调用任一类并告诉它 activateCallbacks() 时,这些类只在它们自己的范围内激活回调,即 SomeClassOne 会调用 someCallback() 但不会调用 someOtherCallback() ,反之亦然,现在我假设这与闭包的范围有关,但是我不确定如何获得我所追求的行为......
我尝试将静态类转换为常规类,然后通过构造函数将其传递给 2 个类,但仍然遇到同样的问题......
所以我的问题是如何让类引发所有回调
- 编辑 -
这是一个示例,显示与我在实际应用程序中遇到的相同问题,我已将所有脚本代码放入页面中以提供更清晰的示例:
http://www.grofit.co.uk/other/pubsub-test.html
这是一个简单的应用程序,有 2 个演示者和 2 个视图……一个视图涉及在页面顶部添加 2 个数字,第二个视图涉及获取总数并将其相乘并显示结果。
我使用的第 3 方库是PubSubJS,第一个演示者侦听一个事件,告诉它其中一个框已更改并重新汇总第一行。当顶部的乘法或总计发生变化时,第二个演示者会监听,然后重新计算底部的值。现在第一个演示者重新计算正确,而第二个演示者将在乘法框发生变化时正确重新计算,但是!当顶部的总数发生变化时,它不会重新计算,即使它应该收到通知......
无论如何,快速浏览一下页面上的源代码,看看我的意思......