我在映射对象的元素并使用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数组的元素包含两个元素key
和value
。相关的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.key
和item.key
,但这些绑定都没有效果。如果有人能够看到我在这里缺少的东西,那将非常感激。
答案 0 :(得分:2)
你需要这样做
<select id="subTaskDistributionInput"
data-bind="
options: distributions,
optionsText: $root.getValue,
optionsValue: $root.getKey
"
class="form-control input-sm"></select>
另请参阅optionsValue
而不是value
答案 1 :(得分:1)
我相信你应该写
optionsValue: 'key'