您需要將您的<select>
值綁定到實際的observable屬性以查看更改。
<-- ------------------------ here....................... -->
<select name="search_option" data-bind="value: criteria">
<option value="O">Order Search</option>
<option value="P">PO Number Search</option>
</select>
和
var orderSearchViewModel = {
criteria: ko.observable("O") // give a default value
};
orderSearchViewModel.helperText = ko.computed(function() {
if (this.criteria() == "P") {
return "Searching by PO Number";
}else {
return "Searching by Order Number";
}
}, orderSearchViewModel);
ko.applyBindings(orderSearchViewModel);
注意criteria
是需要執行,以獲得潛在價值的功能,所以
if (this.criteria == "P")
是行不通的。
http://jsfiddle.net/dnfCb/11/
順便說一句,我認爲自包含視圖模型建立是一個更好一點:
function OrderSearchViewModel() {
var self = this;
this.criteria = ko.observable("O");
this.helperText = ko.computed(function() {
if (self.criteria() == "P") {
return "Searching by PO Number";
} else {
return "Searching by Order Number";
}
});
}
ko.applyBindings(new OrderSearchViewModel());
謝謝你,這個工程也是如此。我注意到了var self = this這一行。你爲什麼要這麼做?爲什麼不只是引用標準()而不是self.criteria()? – TheWebGuy
@ Gordon因爲在範圍內沒有'criteria',就計算值的函數而言。如果使用'var'聲明'criteria',它就會工作,但事實並非如此。 (提示:當計算函數運行時,'this'指向'window'對象)。聲明'var self = this;'是一種常見的技術來存儲對「父對象」的引用。另一個變體是將'this'作爲第二個參數傳遞給'ko.computed()',就像你在代碼中一樣。 – Tomalak