转换方法在剔除JS邮箱中不起作用

时间:2018-07-27 02:45:31

标签: knockout.js knockout-3.0 knockout-postbox

我正在使用敲除邮箱插件来遵循敲除中的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函数通过订户可观察的用户设置另一个可观察的值,这样我就可以转换数据并分配它。

谢谢

1 个答案:

答案 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”。