Метод преобразования не работает в нокауте js postbox
Я использую плагин "нокаут-пост", чтобы следовать шаблону паба в нокауте. Я могу получать и отправлять данные между компонентами, но проблема в том, что я не могу использовать функцию преобразования.
Ниже приведен код и ссылка на скрипку. Может кто-нибудь, пожалуйста, скажите мне, что я делаю здесь неправильно
<div id="container1">
First View Model:
<input type="text" data-bind="value: data1">
</div>
<br/>
<div id="container2">
Second View Model:
<span data-bind="text: data2"></span><br/>
<span data-bind="text: newData"></span>
</div>
а вот и моя модель
function Container1ViewModel()
{
var self = this;
self.data1 = ko.observable(false).publishOn("showDiv");
}
function Container2ViewModel() {
var self = this;
this.data2 = ko.observable().subscribeTo("showDiv", true,transform);
this.newData = ko.observable('45');
var transform = function(newValue) {
newData(newValue);
return 123;
};
}
var container1VM;
var container2VM;
container1VM = new Container1ViewModel();
ko.applyBindings(container1VM, document.getElementById("container1"));
container2VM = new Container2ViewModel();
ko.applyBindings(container2VM, document.getElementById("container2"));
Вот ссылка на скрипку Fiddle
Здесь я ищу то, чтобы установить значение другого, наблюдаемого через наблюдаемого абонента, используя функцию преобразования, чтобы я мог преобразовать данные и назначить их.
Спасибо
1 ответ
Вы забыли некоторые ссылки на себя, а также потеряли определение функции преобразования во второй ViewModel.
function Container2ViewModel() {
var self = this;
var transform = function(newValue) {
self.newData(newValue);
// this will ALWAYS be the value passed to self.data2
return 123;
};
self.newData = ko.observable('47');
self.data2 = ko.observable().subscribeTo("showDiv", true, transform);
}
Я обновил скрипку с рабочей версией кода: http://jsfiddle.net/0454h205/304/
Обратите внимание, что всегда возвращая "123" в преобразовании, получается, что наблюдаемым data2 всегда будет "123".