Knockout.js 淘汰赛JS+;更新辅助文本
我对击倒JS相当陌生。我试图做一个简单的任务,如果下拉菜单发生变化,根据下拉列表中选择的值显示一个帮助器文本 我的示例位于JSFIDLE上: 注意:我不确定是否允许链接到JSFIDLE,如果不允许,我将在这里粘贴代码。似乎ko.computed事件只在加载时触发。当条件改变时,似乎无法启动它Knockout.js 淘汰赛JS+;更新辅助文本,knockout.js,Knockout.js,我对击倒JS相当陌生。我试图做一个简单的任务,如果下拉菜单发生变化,根据下拉列表中选择的值显示一个帮助器文本 我的示例位于JSFIDLE上: 注意:我不确定是否允许链接到JSFIDLE,如果不允许,我将在这里粘贴代码。似乎ko.computed事件只在加载时触发。当条件改变时,似乎无法启动它 谢谢您的时间。您需要将您的值绑定到实际的可观察属性以查看更改 <-- ------------------------ here....................... --> <s
谢谢您的时间。您需要将您的
值绑定到实际的可观察属性以查看更改
<-- ------------------------ here....................... -->
<select name="search_option" data-bind="value: criteria">
<option value="O">Order Search</option>
<option value="P">PO Number Search</option>
</select>
请注意,criteria
是一个需要执行以获取基础值的函数,因此
if (this.criteria == "P")
这是行不通的
顺便说一句,我认为自包含的视图模型设置更好一些:
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=这一行。你为什么这么做?为什么不直接引用criteria()而不是self.criteria()?@Gordon,因为就计算值的函数而言,范围中没有
条件。如果用var
声明criteria
,它会起作用,但事实并非如此。(提示:当计算函数运行时,this
指向窗口
对象。)声明var self=this代码>是存储对“父对象”的引用的常用技术。另一个变量是将这个作为第二个参数传递给ko.computed()
,就像您在代码中所做的那样。
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() );