我想在Knockout中创建一个对象数组。每个对象由一个可观察数组(包含一个字母数字代码列表)和一个文本字段组成,用于与代码相关的描述。在从列表中选择代码时,我希望相应地更新文本字段。我要做的是使用代码然后从Web服务检索相应的描述,但我仍然无法从选择的代码下拉列表中触发订阅事件。然后我需要获取所选文本并更新说明字段。这是我的jsFiddle:
http://jsfiddle.net/phykell/tuqQp/
我认为问题在于我如何声明订阅方法:
self.Items.subscribe(function(data) {
alert(data);
data.Description = data.Code;
});
在此示例中,我只是尝试将代码复制到description字段(请注意,我还没有设法获取Code下拉列表以显示实际的Code值!
感谢您寻找:)
答案 0 :(得分:2)
我在代码中添加了一些HTML来显示Code值并删除了items变量,因为它是不必要的。我不确定您要订阅的是什么(Knockout会自动订阅项目属性中的更改,如果您只是尝试订阅添加或删除项目,那么您已经使用您的代码这样做了)
注意:您需要Knockout的optionsText属性才能知道列表中显示的内容。
<select style="width: 200px;"
data-bind="options: $root.availableItems, optionsText: 'Description', value: Code, optionsCaption: '-- Select Code --'">
</select>
修改强>
好的,我已经更新了小提琴,做你想做的事。
当您尝试获取值时,无需订阅。只需创建一个模型(函数)并使用一个基于您想要依赖的值的observable。在小提琴中,我根据代码的值进行了计算(描述)。每当代码的值发生变化时,都会调用description,因为它会自动订阅它。