KnockoutJS和价值绑定(双向)

时间:2012-04-20 14:13:29

标签: knockout.js

我有一个简单的jsfiddle,我试图更好地理解价值绑定。我有一个输入控件值绑定到我的viewModel上的搜索属性,如下所示:

<input data-bind="value: search" />

我的搜索属性定义如下:

this.search = ko.observable("");

我也在&#34;搜索&#34;财产如下:

this.search.subscribe(function(newValue) {
    alert("New value is " + newValue);
    alert("New value is" + this.search);
});

我可以看到 newValue 在我输入时更改,然后选择另一个控件,但viewModel属性搜索确实始终未定义。我期待双向绑定,因为我键入信息搜索将具有类型值,以便我可以在使用ajax执行webservice调用的按钮中使用它,但是 undefined < / strong>是我在该字段中唯一没有设置搜索的默认值的值。

我是否希望在订阅通话中更改搜索的值?我认为这可以通过双向限制来完成。

1 个答案:

答案 0 :(得分:2)

首先,在subscribe方法中,this未引用视图模型,因此没有search属性可用(因此undefined)。您可以通过使用该引用保存对其他变量名称(例如_self)和访问search的视图模型的引用来解决此问题。

其次,您需要将search作为函数调用以获取它的值 - 在使用Knockout时,所有可观察值都是如此。

var viewModel = function() {
    var _self = this;
    this.search = ko.observable("");

    this.search.subscribe(function(newValue) {
        alert("New value is " + newValue);
        alert("New value is " + _self.search());
    });
};

Updated Fiddle