2016-10-24 72 views
0

我有此代码,如何添加选项到淘汰赛js选项中的第一个选项?

<select class="form-control" required data-bind="options: legends, value: statusToChange"> 

我有一个传说阵列。我想在选项中添加“”(空格)。但我不想在数组中添加它。

我使用基因敲除js为这个应用程序,所以我有self.legends()作为传说数组。

回答

0

这听起来像你正在寻找的optionsCaption binding

optionsCaption

有时候,你可能不希望默认选择任何特定选项。但是单选下拉列表通常从选择的某个项目开始,因此如何避免预选某些内容?通常的解决方案是在选项列表前添加一个特殊的虚拟选项,该选项只读取“选择一个项目”或“请选择一个选项”或类似选项,并且默认选择该选项。

这个很简单:只需添加一个名称为optionsCaption的附加参数,其值是要显示的字符串。例如:

<select data-bind='options: myOptions, optionsCaption: "Select an item...", value: myChosenValue'></select> 

KO将前缀与一个显示文本的项目列表“中选择一个项目......”和值为undefined。因此,如果myChosenValue的值为undefined(默认情况下为可观察值),则将选择虚拟选项。如果参数optionsCaption是可观察值,则初始项目的文本将随着可观察值的更改而更新。

实施例:

var vm = { 
 
    legends: ko.observableArray([ 
 
    "one", 
 
    "two", 
 
    "three", 
 
    "four" 
 
    ]), 
 
    legend: ko.observable() 
 
}; 
 
vm.legend.subscribe(function(newValue) { 
 
    console.log("Legend: " + newValue); 
 
}); 
 
ko.applyBindings(vm, document.body);
<select data-bind="options: legends, optionsCaption: 'legends', value: legend"></select> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

+0

它是未定义的。 – JMA

+0

@JohnArellano:你想要什么呢?字面上''“''?你可以简单地创建一个计算器,将未定义的转换为其他值:'vm.legendComputed = ko.pureComputed(function(){var l = this.legend(); return l === undefined?“”:l ;};' –

+1

...或者创建一个计算数组,用于'options',这个数组只是前面带''''的原始数组。 –