2014-06-25 71 views
3

我有使用Knockout動態創建的X個下拉列表,現在我想爲每個下拉列表預先選擇一個選項。巧合的是,我有一個可觀察的數組,其X條目對應於我想要選擇的選項。我如何使用這個數組來選擇我的選項?在knockout.js中添加可觀察數組的下拉列表

實施例視圖模型:

function AppViewModel() { 
    var self = this; 
    self.array = ko.observable(["Dog","Cat"]); 
} 

在本例中,我有兩個下拉列表,兩者都具有「狗」和「貓」選項。我想爲第一個下拉選擇「狗」,第二個選擇「貓」。

這裏是我的HTML:

<div data-bind="foreach: array"> 
     <label> 
     <select data-bind="options: array"></select> 
     </label> 
</div> 
+0

如果您的要求真的很簡單,您可以使用foreach中的$ index()來訪問選定的值:http://jsfiddle.net/pvF43/ – nemesv

+1

@nemesv這正是我所需要的。當需要基於數組的索引進行填充時,需要使用$ index()。謝謝! – user3757174

回答

2

由於每docs你需要一個value爲您選擇的有約束力。

function AppViewModel() { 
    var self = this; 
    self.array = ko.observable(["Dog","Cat"]); 
    self.selected = ko.observable(self.array()[0]); 
} 

然後:

<select data-bind="options: array, value: selected "></select> 

例子:http://jsfiddle.net/H6DL5/

如果你有許多的下拉列表中,那麼你可以使用subVMs的數組,你的結果。事情是這樣的:

function AppViewModel() { 
    var self = this; 
    self.array = ko.observable(["Dog", "Cat", "Weasel"]); 
    self.dropDowns = ko.observableArray([ 
    new SubVM("Dog"), 
    new SubVM("Cat")]); 
} 

function SubVM(selected) { 
    var self = this; 
    self.selected = ko.observable(selected); 
} 

可以綁定像這樣:

<div data-bind="foreach:dropDowns"> 
    <select data-bind="options: $parent.array, value: selected "></select> 
</div> 

現在,你需要將它們添加到您的母VM的dropDowns陣列,您可以添加儘可能多的下拉列表。

例子:http://jsfiddle.net/H6DL5/1/

如果您需要在每個下拉不同的選擇,只需添加一個陣列的可用選項,您SubVM和綁定爲options,與其母公司名單。

+0

我有和數組中的元素相同數量的下拉列表,所以我不想只硬編碼一個選定的值。 – user3757174

+0

@ user3757174:您將需要將實際選定的值放在某個地方不是您?你可以創建一個值的數組,但更好的可能是創建一個具有選定值的子虛擬機。 –

+0

當然,但我不會總是有2個下拉列表 - 可能還有更多,取決於傳入的數據。也許我應該動態創建observables? – user3757174

相關問題