您需要将您的<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