选择的选项ID和值

SOR*_*der 7 knockout.js

通常,当我有一个选择列表时,我将它与敲除绑定如下:

<select
    data-bind="
        options: data,
        optionsText: 'Name',
        optionsValue: 'Id',
        optionsCaption: 'Select ...',
        value: dataSelectedId" ></select>
Run Code Online (Sandbox Code Playgroud)

但这种绑定存在问题:您没有选定的对象.你有它的ID.如何合并这两个要求:绑定项目的ID和项目本身?

现在我使用computedobservable来获取所选项目,通常如下所示:

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];
});
Run Code Online (Sandbox Code Playgroud)

我尝试使用自定义函数来包装值getter,但是当选择更改时,它会调用每个元素,因此使用此方法没有任何好处.是一个jsfiddle.

Man*_*jRK 7

删除optionsValue参数.然后,所选值将是"选定项目"而不是Id.

更新的代码将是:

<select
    data-bind="
    options: data,
    optionsText: 'Name',
    optionsCaption: 'Select ...',
    value: dataSelectedItem" ></select>
Run Code Online (Sandbox Code Playgroud)

dataSelectedItem 现在将拥有所选项目.

一旦你有了这个项目.你可以Id从对象本身获得dataSelectedItem().Id