我有一个简单的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>是我在该字段中唯一没有设置搜索的默认值的值。
我是否希望在订阅通话中更改搜索的值?我认为这可以通过双向限制来完成。
答案 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());
});
};