Knockout.js - 未设置选择值

时间:2013-11-20 14:05:47

标签: javascript jquery knockout.js

我正在使用knockout.js,而且它没有设置空选项的值(四):

<select data-bind="value: item.widgetValue, attr: {id: item.widgetName, name: item.widgetName}, options: item.options, optionsText: ‘label’, optionsValue: ‘value’” id=”fld-“ name=”fld0”>
  <option value=”one”>One</option>
  <option value=”two”>Two</option>
  <option value=”three”>Three</option>
  <option value>Four</option>
  ...
</select>

这会产生一个问题:当你选择任何选项并尝试选择Four时,它会选择One;它只会在您第二次尝试选择时选择四。

我尝试更改敲除数据绑定来修复它:

value: $.trim(item.widgetValue)

这允许您立即选择四,但在提交四个选定的表单后,错误地将One显示为已选中。

有关可能导致此问题的原因或如何解决问题的任何想法?

1 个答案:

答案 0 :(得分:0)

如果在select元素上使用选项绑定,则不应手动设置选项。如果那些是由绑定动态创建的(即你实际上是使用item.options作为你的源),那么检查你绑定select元素的对象 -

item.options可能看起来像这样(缺少值或者某种程度上不像其他选项) -

item.options = [
    { label: 'someLabel1', value: 'someValue1' },
    { label: 'someLabel2', value: 'someValue2' },
    { label: 'someLabel3', 'someValue3' }
    ];

但应该是一个更加统一的对象(明确定义的模型) -

function optionModel(label, value) {
    var self = this;
    self.label = ko.observable(label);
    self.value = ko.observable(value);
}

item.options = [
    new optionModel('someLabel1', 'someValue1'),
    new optionModel('someLabel2', 'someValue2'),
    new optionModel('someLabel3', 'someValue3')
    ];