Knockout.js 绑定到同一敲除可观察属性的两个控件会导致错误

Knockout.js 绑定到同一敲除可观察属性的两个控件会导致错误,knockout.js,knockout-2.0,Knockout.js,Knockout 2.0,我正在尝试编写一个UI,允许用户通过文本框输入一个数字或从下拉列表中选择一个选项 我已经在 如你所见: 选择“号码”后,您可以在文本框中输入文本 选择“选项”后,您可以从下拉列表中选择两个选项之一 文本框和下拉列表都绑定到viewModel中项目的ItemValue属性。虽然代码似乎在工作,我得到了错误。如果在Chrome中启动调试窗口,当您更改第一个下拉列表时,会出现错误: 未捕获的TypeError:对象0没有方法“ItemName” 我相信这是在ItemTextdependenttob

我正在尝试编写一个UI,允许用户通过文本框输入一个数字或从下拉列表中选择一个选项

我已经在

如你所见:

  • 选择“号码”后,您可以在文本框中输入文本
  • 选择“选项”后,您可以从下拉列表中选择两个选项之一
文本框和下拉列表都绑定到
viewModel
中项目的
ItemValue
属性。虽然代码似乎在工作,我得到了错误。如果在Chrome中启动调试窗口,当您更改第一个下拉列表时,会出现错误:

未捕获的TypeError:对象0没有方法“ItemName”

我相信这是在
ItemText
dependenttobservable(aka computed)中发生的

显然,正在对导致错误的数值“0”调用
ItemName()
函数


我该怎么做才能不发生此错误?将两个控件绑定到同一个可观察对象的设计是一个基本错误吗?

在将项设置为具有ItemName属性的对象之前,请将IsItemConstant更改为false。设置后,DependentToServable将立即运行,并尝试计算不存在的ItemName()observable。您可以检查ItemName属性是否存在,也可以使用延迟计算,直到进行了所有更改:

this.ItemText = ko.dependentObservable(function () {
    return _isItemAConstant() === 'true' ? this.ItemValue() : this.ItemValue().ItemName();
}, this).extend( { throttle: 1} );

this.ItemText2 = ko.computed(function() {
    return this.ItemValue().ItemName ? this.ItemValue().ItemName() : this.ItemValue();
}, this);

好东西,杰森。谢谢你的帮助。
this.ItemText = ko.dependentObservable(function () {
    return _isItemAConstant() === 'true' ? this.ItemValue() : this.ItemValue().ItemName();
}, this).extend( { throttle: 1} );

this.ItemText2 = ko.computed(function() {
    return this.ItemValue().ItemName ? this.ItemValue().ItemName() : this.ItemValue();
}, this);