У меня есть статический класс, который содержит массив функций обратного вызова, затем у меня есть несколько других классов, которые используются для взаимодействия с этим статическим классом ...
Вот простой пример статического класса:
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(); }
}
Теперь проблема, с которой я столкнулся, заключается в том, что когда я вызываю любой из классов и говорю ему, чтобы ActivCallbacks () классы активируют только обратные вызовы в своей области видимости, то есть SomeClassOne будет вызывать someCallback (), но не someOtherCallback (), и наоборот, теперь Я предполагаю, что это как-то связано с объемом замыканий, однако я не уверен, как получить поведение, за которым я следую ...
Я пытался превратить статический класс в обычный класс, а затем передать его в 2 класса с помощью конструктора, но все еще получаю ту же проблему ...
Итак, мой вопрос: как заставить классы вызывать все обратные вызовы
- РЕДАКТИРОВАТЬ -
Вот пример, отображающий ту же проблему, что и мое настоящее приложение. Я поместил весь код скрипта на страницу, чтобы дать более ясный пример:
http://www.grofit.co.uk/other/pubsub-test.html
Это простое приложение с 2 докладчиками и 2 представлениями ... одно представление связано с добавлением 2 чисел в верхней части страницы, второе представление - с получением этой суммы, ее умножением и отображением результата.
Используемая мной сторонняя библиотека PubSubJS , и первый докладчик прослушивает событие, чтобы сообщить ему, что один из блоков изменился, и пересчитывает верхнюю строку. 2-й докладчик слушает, когда меняется умножение или итог в верхней части, а затем пересчитывает нижнюю. Теперь первый докладчик правильно пересчитывает, а второй докладчик будет правильно пересчитывать всякий раз, когда изменяется окно умножения, ОДНАКО! Он будет НЕ пересчитывать, когда сумма на вершине изменяется, даже если он должен получить уведомление ...
В любом случае, быстро просмотрите исходный код на странице, чтобы понять, что я имею в виду ...