KnockoutJS - привязка к коллекции словарей
Как использовать KnockoutJS для привязки коллекции словарей к списку выбора.
Если мой словарь "Destinations" выглядит так в 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"
Ответы
Ответ 1
Как правило, при работе со словарем вам нужно сопоставить его с массивом, содержащим объекты с свойствами ключа/значения.
Будет что-то вроде:
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/
Ответ 2
Я знаю, что на это уже был дан ответ, но я подумал, что поделюсь более полным решением.
https://github.com/jamesfoster/knockout.observableDictionary
здесь jsfiddle, который показывает его
http://jsfiddle.net/HLnGs/
надеюсь, что кто-то еще найдет это полезным
Ответ 3
Более простой вариант, если вы создаете API-интерфейс сервера, - это просто преобразовать словарь в массив на сервере и вернуть массив:
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>