Knockout.js KnockoutJS和值绑定(双向)

Knockout.js KnockoutJS和值绑定(双向),knockout.js,Knockout.js,我有一个简单的例子,试图更好地理解值绑定。我将输入控件值绑定到viewModel上的搜索属性,如下所示: <input data-bind="value: search" /> this.search.subscribe(function(newValue) { alert("New value is " + newValue); alert("New value is" + this.search); }); 我还对“搜索”属性实施了如下订阅: <inpu

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

<input data-bind="value: search" />
this.search.subscribe(function(newValue) {
    alert("New value is " + newValue);
    alert("New value is" + this.search);
});
我还对“搜索”属性实施了如下订阅:

<input data-bind="value: search" />
this.search.subscribe(function(newValue) {
    alert("New value is " + newValue);
    alert("New value is" + this.search);
});
我可以看到newValue在键入时发生更改,然后选择另一个控件,但viewModel属性search始终是未定义的。我希望通过双向绑定,当我键入信息时,search会有类型值,这样我就可以在使用ajax执行Web服务调用的按钮中使用它,但是未定义的是我在字段中可以得到的唯一值,而无需设置search的默认值


是否需要我在订阅调用中更改搜索的值?我认为这可以通过双向绑定来实现。

首先,在
subscribe
方法中,
不引用视图模型,因此没有可用的
搜索
属性(因此
未定义
)。您可以通过将对视图模型的引用保存在另一个变量名称下(如
\u self
)来解决此问题,并使用该引用访问
搜索

其次,您需要调用
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());
    });
};

您必须原谅我,我刚刚在脑海中设定了viewModel的这些对象可以像C#中的变量一样访问。我确实看到代码说并非所有浏览器都支持访问变量,我可能不得不将它们作为函数调用,但出于某种原因,我立即否认了这一事实。谢谢。没问题,但这和浏览器无关;这与敲除有关-如果您通过任何浏览器访问
\u self.search
,则结果应始终是
函数(…){…}
,因为它是一个函数