0

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

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

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

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

在这个示例中,我只是试图将代码复制到描述字段(请注意,我还没有设法让代码下拉列表显示实际的代码值!

谢谢你看:)

4

1 回答 1

2

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

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

注意:您需要一个 optionsText 属性才能让 Knockout 知道要在列表中显示什么。

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

编辑

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

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

当您尝试获取价值时,无需订阅。只需创建一个模型(函数)并使用基于您想要依赖的任何值的可观察对象。在小提琴中,我根据代码的值进行了计算(描述)。每当代码更改描述的值时,都会调用它,因为它会自动订阅。

于 2013-07-03T17:26:45.080 回答