Knockout.js 淘汰赛JS+;更新辅助文本

Knockout.js 淘汰赛JS+;更新辅助文本,knockout.js,Knockout.js,我对击倒JS相当陌生。我试图做一个简单的任务,如果下拉菜单发生变化,根据下拉列表中选择的值显示一个帮助器文本 我的示例位于JSFIDLE上: 注意:我不确定是否允许链接到JSFIDLE,如果不允许,我将在这里粘贴代码。似乎ko.computed事件只在加载时触发。当条件改变时,似乎无法启动它 谢谢您的时间。您需要将您的值绑定到实际的可观察属性以查看更改 <-- ------------------------ here....................... --> <s

我对击倒JS相当陌生。我试图做一个简单的任务,如果下拉菜单发生变化,根据下拉列表中选择的值显示一个帮助器文本

我的示例位于JSFIDLE上:

注意:我不确定是否允许链接到JSFIDLE,如果不允许,我将在这里粘贴代码。似乎ko.computed事件只在加载时触发。当条件改变时,似乎无法启动它


谢谢您的时间。

您需要将您的
值绑定到实际的可观察属性以查看更改

<-- ------------------------ 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() );​