0

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

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

我的搜索属性定义为:

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

我还在“搜索”属性上实现了订阅,如下所示:

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

我可以看到newValue在我键入然后选择另一个控件时发生变化,但是 viewModel 属性搜索始终是undefined。我期望使用 2 向绑定,当我键入信息时,搜索将具有类型值,以便我可以在使用 ajax 执行 web 服务调用的按钮中使用它,但undefined是我可以在该字段中获得的唯一值不设置搜索的默认值。

是否期望我在 subscribe 调用中更改search的值?我认为这可以通过双向绑定来为我完成。

4

1 回答 1

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());
    });
};

更新小提琴

于 2012-04-20T14:24:08.120 回答