2015-12-21 60 views
1

我使用有layout.chtml語言下拉淘汰賽JS淘汰賽設置下拉值

<select id="Language" class="styled-select" data-bind="value: Language,options: locale, value: selectedLocale, optionsText: 'name'"></select> 


var viewModel = this; 

viewModel.locale = [{ id: 1, name: 'English' }, { id: 2, name: 'Spanish' }]; 

viewModel.selectedLocale = ko.observable(sessionStorage.culture); 
viewModel.selectedLocaleValue = ko.computed(function() { 
    sessionStorage.culture = viewModel.selectedLocale() && viewModel.selectedLocale().id; 
}); 

ko.applyBindings(viewModel); 

雖然跑我修改了下拉菜單,並選擇了西班牙,那麼應用程序。當我點擊提交按鈕的頁面重新得到-rendered並再次使用默認英語重新設置文化會話值。

以下是解決問題的可能方法。

  1. 在重新渲染做一些調整,並設置下拉列表中選擇值,而從登錄
  2. 後行動有Ajax調用的帖子在文化會議應反映
  3. 避免重新呈現。

我已經嘗試選項1,但我不知道如何設置選定值下拉

+0

我建議你去第三個選項,因爲它會增加你的頁面的用戶體驗,以及爲什麼你想呈現整個頁面只是刷新頁面上的一個組件。 – dreamweiver

回答

1

你只存儲在會話中所選擇的場所的id,但是你需要存儲整個區域對象selectedLocale進行下拉式預選工作。

所以你需要通過id查找存儲的區域:

var localeFromSession = ko.utils.arrayFirst(viewModel.locale, function(item) { 
    return item.id == sessionStorage.culture; 
}); 

,並將其設置爲selectedLocale

viewModel.selectedLocale = ko.observable(localeFromSession); 

正如你還可以設置optionsValue: 'id'在你的綁定的替代解決方案。在這種情況下viewModel.selectedLocale將只包含id而不是整個對象。但是,在這種情況下,您還需要更改保存代碼以及其他您希望選擇完整語言環境對象的地方。

+0

哇!!!!!!!!!真棒!衷心的感謝......我花了20多個小時 – Niventh