2015-01-13 40 views
0

我正在使用敲除數據綁定來創建選項列表。基本上在我的服務器端我有一個枚舉傳回枚舉詞典時選定的值不起作用

public enum CarType 
{ 
    Saloon = 1, 
    Hatch = 2, 
    Convertable = 3, 
    SUV = 4 
} 

這基本上獲得創建到服務器端的字典,併發送回客戶端。

所以上面的枚舉將作爲一個具有鍵和值的對象返回到客戶端。

我的視圖模型是像這樣:

this.carName= ko.observable(); 
this.carType = ko.observable(); 

我選擇綁定如下:

<select class="form-control" data-bind="options: $root.carTypes, optionsText: 'value', optionsValue: 'key', value: carType"></select> 

所以基本上,當我按編輯按鈕,這一觀點將得到正確呈現第一次輪。但是如果我取消編輯頁面並重新打開它,那麼它會選擇選項列表中的第一個元素。

不知道我是否做錯了什麼,或者淘汰賽的表現與dictionarys有什麼不同?

的車型對象返回的字典元素例如下面

[{key="1", value="Saloon"}, {key="2", value="Hatch"} ....... 
+1

顯示'carTypes'的實際結構。另外,爲什麼在從carTypes中提取car-name的時候同時保留'carName'和'carType'? – haim770

+0

您可以請發佈取消的代碼和枚舉格式是什麼在javascript –

+0

已添加從服務器返回的對象數組。明天我需要發送取消並保存代碼。 – tjhack

回答

0

數組我不知道如果我理解你的問題。你是否希望避免選擇第一個項目?如果是這樣,看看在optionsCaption在docs:http://knockoutjs.com/documentation/options-binding.html#parameters

optionsCaption

有時候,你可能不希望由 默認選擇任何特定選項。但是單選下拉列表通常從選擇的某個 項目開始,因此如何避免預選某些內容?通常的 解決方案是在選項列表前添加一個特殊的虛擬選項 ,該選項只讀取「選擇一個項目」或「請選擇一個選項」或 類似,並且默認選擇一個選項。

這很容易做到:只需添加一個名稱爲 optionsCaption的附加參數,其值爲要顯示的字符串。例如:

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

KO將前綴與一個顯示文本 項目列表「中選擇一個項目......」和值爲undefined。因此,如果myChosenValue 包含未定義的值(默認情況下爲可觀察值),則將選擇 虛擬選項。如果optionsCaption參數是可觀察值 ,則初始項目的文本將隨着 可觀察值的更改而更新。