3

我有一个不起作用的代码。这是这里http://jsfiddle.net/JPBarbosa/uxwTM/4/

数据绑定参数optionsValue不像参数optionsText那样工作。

我对两者都使用相同的功能!

<select data-bind="options: times, optionsText: function(item) { return item.toLocaleTimeString(); }, optionsValue: function(item) { return item.toLocaleTimeString(); }, value: selectedTime"></select>

问候,JP。

4

1 回答 1

4

您传入的对象optionsValue必须是与要用作值的属性名称相对应的字符串。您不能将其设置为这样的值,optionsText不幸的是它的工作方式不同。

times数组映射到您想要的值会更容易。

<select data-bind="options: ko.utils.arrayMap(times(), function (time) { return time.toLocaleTimeString(); }), value: selectedTime"></select>

尽管您希望将映射代码保持在您的视野之外。因此,将计算的 observable 添加到返回映射值的视图模型中。

var ViewModel = function() {
    // ...
    self.mappedTimes = ko.computed(function () {
        return ko.utils.arrayMap(self.times(), function (time) {
            return time.toLocaleTimeString();
        });
    })
};
<select data-bind="options: mappedTimes, value: selectedTime"></select>

更新的小提琴

于 2012-10-18T23:41:35.987 回答