选项绑定:选择列表不反映绑定对象的值

时间:2011-11-25 09:39:09

标签: knockout.js

我在jQuery模板中使用的选择列表上使用选项绑定:

<select data-bind="options: contactsViewModel.emailTypes, optionsText: 'Value', value: EmailType"></select>

使用针对多个电子邮件地址的淘汰赛foreach调用模板。

EmailTypes是emailtype对象的列表 电子邮件对象包含Value属性,其中包含电子邮件地址的字符串值,Id属性包含Guid id,以及包含emailtype对象的电子邮件类型属性。

emailtype对象由Value属性组成,该属性包含电子邮件类型的名称和guid id。

使用可用的电子邮件类型正确填充下拉列表,但下拉列表未选择正确的项目。它不反映绑定到它的对象的值。

编辑: 显示选择行的模板将被调用: tbody data-bind =“template:{name:'emailTemplate',foreach:contactsViewModel.selectedContactEmails}”&gt;

selectedContactEmails是一个带有电子邮件对象的observableArray,在Json中看起来像这样:

{"EmailType":{"Value":"Home","Id":"191e8a64-8110-493c-b443-3063ff3a852a"},"ParentId":"191e8a64-8110-493c-b443-3063ff3a852c","Parent":null,"Value":"jan@jan.com","Id":"a7aae8fd-6ca3-49ae-b529-124d37a148ca"}

使用映射插件将这些对象的属性转换为observable。

emailTypes是一个填充了EmailType对象的observableArray:

{"Value":"Home","Id":"191e8a64-8110-493c-b443-3063ff3a852a"}

2 个答案:

答案 0 :(得分:8)

下拉列表不会选择有界值,因为下拉列表甚至不知道它受限于哪个属性。您需要在数据绑定中指定selectedOptions属性。

options属性告诉我们它所拥有的数组的下拉列表。

optionsText属性告诉下拉用于显示每个数组项的属性。

optionsValue属性告诉dropdown哪个属性用于选项值。

下拉列表如何知道绑定到哪个值?

使用selected options

答案 1 :(得分:0)

如果没有看到你的viewModel,这很棘手,但有一件事显而易见的是你已经确定了你的选项值(options: contactsViewModel.emailTypes)而不是你的'价值'(value: EmailType)。您是否需要添加EmailType的路径,例如。 value: contactsViewModel.EmailType ??

您还可以确认EmailTypeemailTypes集合中的对象类型相同