У меня есть приложение ASP.NET, и я использую Knockout JS для некоторых минимальных задач в своем приложении. Однако у меня есть некоторые EditorTemplates, которые вычисляют значения для отображения. Я хочу получить доступ к этим значениям из некоторых других EditorTemplates. Я думал, что я мог бы использовать базовую функциональность паб/суб с Knockout, то есть я хотел бы написать в одном EditorTemplate код уведомления, например, так:Сделать доступным доступ к подписке на Nockout.JS глобально
new ko.subscribable().notifySubscribers(this.calculatedValue, "customTopic");
, а затем получить это значение, когда оно меняет в моей другой EditorTemplate
new ko.subscribable().subscribe(function (newValue) {
alert(newValue);
}, this, "customTopic");
Конечно, этот код не работает, так как я создаю new ko.subscribable()
каждый раз.
Как создать единственный ko.subscribable
, который доступен во всех моих представлениях?
Это работает только если это написано в одном блоке в одном представлении. Я использую несколько представлений (несколько EditorTemplates), каждый из которых имеет блок в конце его, делая разные вещи. Извините, если я звучу как newb (я есть!), Но где и как объявить этот глобальный shouter? Я нашел учебник в пабе/подтеке, но каждый пример, который я видел, основан на наличии нескольких режимов просмотра внутри одного представления. –
Посмотрите на обновленный ответ. Он не должен находиться внутри одной виртуальной машины. Пока ваши разные сценарии загружены на страницу, вы можете использовать это. Помните, что 'global shouter' отвечает за связь между вашими виртуальными машинами. Вы можете использовать 'var' в глобальной области (вне всех функций), чтобы объявить глобальную переменную, а также свойство глобального объекта, к которому мы обращаемся как« окно »в браузерах –