选项值数据绑定不起作用

时间:2014-08-06 08:34:51

标签: javascript knockout.js

我在映射对象的元素并使用Knockout.js将它们绑定到<option>元素时遇到了问题。

HTML的相关部分如下:

<!-- ko if: parentObjectExists -->
<!-- ko with: parentObject -->
<div class="form-group">
 <label class="control-label" for="subTaskDistributionInput">Distribution:</label>
 <select id="subTaskDistributionInput" data-bind="options: options.distributions,  optionsText: 'value', value: key" class="form-control input-sm"></select> 
</div>
<!-- /ko -->
<!-- /ko -->    

options.distributions数组的元素包含两个元素keyvalue。相关的Javascript:

function Options(data) {
  var self = this;
  self.distributions = ko.observableArray(data.Distributions);

  //Disposal
  self.isDisposed = false;
  self.dispose = function () {
      self.distributions.dispose();
      self.isDisposed = true;
  };
}

输出选项标签:

<option value>Average</option>
<option value>Triangular</option>

分布包含两个元素:key,一个整数,value,一个字符串。 value元素肯定会准确地传入optionsText,但key属性根本不会进入HTML。我几乎可以肯定这里的问题在于HTML。我尝试过的其他value:绑定是'key'function() { return key; }$data.keyitem.key,但这些绑定都没有效果。如果有人能够看到我在这里缺少的东西,那将非常感激。

2 个答案:

答案 0 :(得分:2)

你需要这样做

<select id="subTaskDistributionInput" 
    data-bind="
        options: distributions,
        optionsText: $root.getValue,
        optionsValue: $root.getKey
    " 
class="form-control input-sm"></select>

另请参阅optionsValue而不是value

Fiddle Demo

请参阅Documentation

答案 1 :(得分:1)

我相信你应该写

optionsValue: 'key'