2012-04-20 77 views
0

我有一個簡單的jsfiddle,我試圖更好地理解值綁定。我有綁定到搜索財產在我的視圖模型的輸入控制值如下:KnockoutJS和值綁定(2-way)

<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。我期待與雙向綁定,因爲我鍵入信息搜索將具有類型值,以便我可以使用它說一個按鈕,執行web服務調用使用ajax,但undefined是我可以在沒有設置搜索的默認值的情況下進入現場。

預計我在訂閱電話中更改搜索的值嗎?我認爲這將通過雙向綁定來完成。

回答

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

+0

你得原諒我,我只是在我的腦海設置視圖模型的這些對象可以像在C#中的變量進行訪問。我看到代碼說,並非所有的瀏覽器都支持訪問變量,我可能不得不將它們作爲函數調用,但由於某種原因,我立即駁回了這一事實。謝謝你。 – ShelbyZ 2012-04-20 14:28:31

+0

沒問題,但afaik這與瀏覽器無關;它與Knockout有關 - 如果你通過瀏覽器訪問'_self.search',那麼結果應該總是'function(...){...}',因爲它*是一個函數 – 2012-04-20 14:31:02