Knockout - 动态添加对象的订阅事件

时间:2013-07-03 16:49:04

标签: javascript knockout.js

我想在Knockout中创建一个对象数组。每个对象由一个可观察数组(包含一个字母数字代码列表)和一个文本字段组成,用于与代码相关的描述。在从列表中选择代码时,我希望相应地更新文本字段。我要做的是使用代码然后从Web服务检索相应的描述,但我仍然无法从选择的代码下拉列表中触发订阅事件。然后我需要获取所选文本并更新说明字段。这是我的jsFiddle:

http://jsfiddle.net/phykell/tuqQp/

我认为问题在于我如何声明订阅方法:

self.Items.subscribe(function(data) {   
    alert(data);
    data.Description = data.Code;
});

在此示例中,我只是尝试将代码复制到description字段(请注意,我还没有设法获取Code下拉列表以显示实际的Code值!

感谢您寻找:)

1 个答案:

答案 0 :(得分:2)

我在代码中添加了一些HTML来显示Code值并删除了items变量,因为它是不必要的。我不确定您要订阅的是什么(Knockout会自动订阅项目属性中的更改,如果您只是尝试订阅添加或删除项目,那么您已经使用您的代码这样做了)

http://jsfiddle.net/tuqQp/3/

注意:您需要Knockout的optionsText属性才能知道列表中显示的内容。

    <select style="width: 200px;" 
        data-bind="options: $root.availableItems, optionsText: 'Description', value: Code, optionsCaption: '-- Select Code --'">
    </select>

修改

好的,我已经更新了小提琴,做你想做的事。

http://jsfiddle.net/tuqQp/8/

当您尝试获取值时,无需订阅。只需创建一个模型(函数)并使用一个基于您想要依赖的值的observable。在小提琴中,我根据代码的值进行了计算(描述)。每当代码的值发生变化时,都会调用description,因为它会自动订阅它。