2013-04-05 31 views
0

這這個問題在這裏 KnockoutJS - Databind to a dictionary collectionKnockoutJS - 數據綁定到詞典集合 - 具有更新

我創建一個下降,由JSON向下選擇來自服務器。 然而,在創建後某些時候,我希望更新的數據。 我創建了一個小提琴 http://jsfiddle.net/LPrf3/

示出其中我就在眼前。我成功更新了select的可觀察數組。 但是...由於某種原因,你需要點擊進入從下拉列表中選擇下來,以便它刷新

的Javascript:

$(function() { 

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

var updatedDestinationsFromServer = {"Arctic":"Includes Polar bears and seals","Antarctic":"Just Penguins"}; 

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

    return result; 
} 

function viewModel() { 
    destinations= ko.observableArray(mapDictionaryToArray(destinationsFromServer)); 
    selectedDestination= ko.observable(); 
    updateDestinations = function() 
    { 
     destinations= ko.observableArray(mapDictionaryToArray(updatedDestinationsFromServer)); 
    }; 
}; 


ko.applyBindings(new viewModel()); 


}); 

HTML

<select data-bind="options: destinations, optionsText: 'key', optionsValue: 'value', value: selectedDestination"></select> 

<hr /> 

<div data-bind="text: selectedDestination"></div> 
<button data-bind="click:updateDestinations">UPDATE</button> 

我怎樣才能得到選擇更新?

回答

1

您reassinging destinations到一個新的observabelArray,而不是更新的陣列。見this fiddle。當更新任何觀察到的,總是傳遞新的值作爲參數,從未分配與=算子的新值。

錯誤方式:

updateDestinations = function(){ 
    destinations=ko.observableArray(mapDictionaryToArray(updatedDestinationsFromServer)); 
}; 

正確方法:

updateDestinations = function(){ 
    destinations(mapDictionaryToArray(updatedDestinationsFromServer)); 
}; 
+1

它的工作原理...它最後的作品! :d 你知道討厭的就是我已經知道了。 但是我花了一些時間才找到地圖字典陣列解決方案,到那個時候心裏卻轉向果凍一樣的東西盯着約12小時後.... 非常感謝! – 2013-04-05 16:43:11