2013-07-03 20 views
0

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

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

我认为这个问题是我如何声明订阅方法:

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

在此示例中,我只是想将代码复制到描述域(请注意,我没有设法得到的代码下拉列表中显示的实际代码值尚未要么!

为寻找谢谢:)

+0

你的口才很好的猫... – dandavis

回答

2

好吧,我在代码中添加了一些HTML代码以显示代码值,并取消了项目变量,因为它是不必要的。我不确定你正在尝试订阅什么(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/

当你试图得到一个数值,没有必要认购。只需创建一个模型(函数)并使用基于您想要依赖的任何值的可观察值。在小提琴中,我根据代码的价值进行了计算(描述)。每当代码更改描述的值被调用,因为它是自动订阅的。

+0

感谢 我可能不应该包括availableItems数组初始化器,因为它可能会产生误导的描述字段的答复:)。 我需要在下拉列表中显示代码,并只按需获取描述数据;原因是该列表可能包含50个条目,而代码只有几个字符,说明字段可能非常大。 – user2025399

+0

顺便提一句,我试图订阅代码下拉列表,以便在选择代码时,然后可以调用我的Web服务,将代码传递给特定方法,然后使用所选代码的相应方法填充说明字段描述。 – user2025399

+0

行 - 我已经更新了小提琴: http://jsfiddle.net/phykell/tuqQp/4/ 如你所见,我添加了一个订阅availableItems观察到的阵列 - 的想法(如果它的工作原理!)是,当选择下拉列表时,该函数被调用并将检索针对代码的描述并相应地更新描述字段。 – user2025399