Knockout.js 所选选项Id和值

Knockout.js 所选选项Id和值,knockout.js,Knockout.js,通常,当我有一个选择列表时,我会用如下方式将其绑定: <select data-bind=" options: data, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Select ...', value: dataSelectedId" ></select> self.dataSelectedCO = ko.c

通常,当我有一个选择列表时,我会用如下方式将其绑定:

<select
    data-bind="
        options: data,
        optionsText: 'Name',
        optionsValue: 'Id',
        optionsCaption: 'Select ...',
        value: dataSelectedId" ></select>
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];
});

我曾尝试使用自定义函数包装value getter,但当选择发生变化时,每个元素都会调用它,因此使用这种方法没有任何好处s是JSFIDLE。

删除
选项value
参数。然后,所选值将是“所选项目”,而不是
Id

更新后的代码为:

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

dataSelectedItem
现在将具有所选项目


一旦你有了物品。您可以从对象本身获取
Id
,如
dataSelectedItem()。Id

我不能这样做,因为这样我就无法将此SELECT放置在发送到服务器的表单中,除非我为所选Id创建额外的隐藏字段。但是使用绑定了Id的隐藏字段将使其生效。如果您想将Id作为SELECT的值,然后对所选项目使用计算的可观测值是一个非常好的方法。