我正在使用敲除邮箱插件来遵循敲除中的pub子模式。我可以在组件之间接收和发送数据,但是问题是我无法使用转换功能。
下面是代码和小提琴链接。有人可以告诉我我在做什么错
<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
我在这里寻找的是通过使用transform函数通过订户可观察的用户设置另一个可观察的值,这样我就可以转换数据并分配它。
谢谢
答案 0 :(得分:0)
您忘记了对 self 的一些引用,并且在第二个ViewModel中放错了 transform 函数的定义。
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”。