通常情况下,当我有一个选择列表时,我将它与敲除绑定如下:
<select
data-bind="
options: data,
optionsText: 'Name',
optionsValue: 'Id',
optionsCaption: 'Select ...',
value: dataSelectedId" ></select>
但这种绑定存在问题:您没有选定的对象。你有它的ID。 如何合并这两个要求:是否绑定了项目的ID和项目本身?
现在我使用computed
observable来获取所选项目,通常如下所示:
self.dataSelectedCO = ko.computed(function() {
for (var i = 0; i < self.data().length; ++i)
if (self.data()[i].Id() == self.dataSelectedId())
return self.data()[i];
});
我尝试使用自定义函数来包装值getter,但是当选择更改时会调用每个元素,因此使用此方法没有任何好处。 Here是一个小伙伴。
答案 0 :(得分:7)
删除optionsValue
参数。然后,所选值将是“所选项目”。而不是Id
。
更新的代码将是:
<select
data-bind="
options: data,
optionsText: 'Name',
optionsCaption: 'Select ...',
value: dataSelectedItem" ></select>
dataSelectedItem
现在将拥有所选项目。
一旦你有了这个项目。您可以从对象本身获取Id
,例如dataSelectedItem().Id