2011-09-13 45 views
15

如何使用KnockoutJS將字典集合綁定到選擇列表。KnockoutJS - 將數據綁定到字典集合

如果我的「目的地」字典看起來像這樣JSON:

{"Europe":"Europe incl Egypt, Turkey & Tunisia","ANZO":"Australia & New Zealand","WorldwideUSA":"Worldwide (incl USA & Canada)"} 

如何綁定這一個選擇列表。事情是這樣的:

data_bind="value: Destination, options: Destinations.Value, optionsText: Destinations.Key" 

回答

25

通常,藉助字典打交道時,你會想它映射到包含與鍵/值屬性的對象數組。

會是這樣的:

function mapDictionaryToArray(dictionary) { 
    var result = []; 
    for (var key in dictionary) { 
     if (dictionary.hasOwnProperty(key)) { 
      result.push({ key: key, value: dictionary[key] }); 
     } 
    } 

    return result; 
} 

樣品在這裏:http://jsfiddle.net/rniemeyer/7yDTJ/

+0

瑞安,我們如何預選擇從字典中的價值?在你的小提琴中,我爲selectedDestination增加了值:ko.observable(「ANZO」),第二項沒有預選。 – user583066

+0

該示例具有'optionsValue:'value'',因此它期望值而不是密鑰。我更新了示例:http://jsfiddle.net/rniemeyer/7yDTJ/ –

+0

我會查看映射插件http://knockoutjs.com/documentation/plugins-mapping.html –

4

一個簡單的選擇一個的jsfiddle將字典轉換爲服務器上的數組並返回該數組:

Dictionary<string, string> myDict = ... ; 
return myDict.toArray(); // returns KeyValuePair<string, string>[] 

現在你可以很容易地在淘汰賽數組綁定...

<select class="form-control" 
    data-bind="options: opts, optionsText: 'Value', optionsValue: 'Key', optionsCaption: 'Show All', value: filter.myVal"> 
</select>