7

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

<select
    data-bind="
        options: data,
        optionsText: 'Name',
        optionsValue: 'Id',
        optionsCaption: 'Select ...',
        value: dataSelectedId" ></select>

但是这种绑定存在一个问题:您没有选定的对象。你有它的 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];
});

I've tried to wrap value getter using a custom function but it's called for every element when selection changes, so there are no benefits here of using this approach. 是一个jsfiddle。

4

1 回答 1

7

删除optionsValue参数。然后选定的值将是“选定项”而不是Id.

更新后的代码将是:

<select
    data-bind="
    options: data,
    optionsText: 'Name',
    optionsCaption: 'Select ...',
    value: dataSelectedItem" ></select>

dataSelectedItem现在将具有选定的项目。

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

于 2013-05-07T12:14:19.517 回答