我在同一個項目中同時使用Knockout(版本2.0)和jQuery Mobile(版本1.0.1)。問題是將數據綁定到選擇列表。 jQuery Mobile提供了選擇列表,其中看似選擇的值和實際列表是單獨的元素。這是通過執行Knockout和jQuery Mobile:將數據綁定到選擇列表
$(element).selectmenu('refresh', true);
在更改列表或選定的值之後。根據我的經驗,這是一個危險的情況,因爲開發人員經常忘記刷新選擇列表。
爲了緩解這一點,我編寫了自己的Knockout綁定處理程序。該值被綁定到選擇列表與下面的代碼:
<select name="selection" data-bind="jqmOptions: values, optionsValue: 'id', optionsText: 'name', value: selectedValue">
</select>
jqmOptions的實施:
ko.bindingHandlers.jqmOptions = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
if (typeof ko.bindingHandlers.options.init !== 'undefined') {
ko.bindingHandlers.options.init(element, valueAccessor, allBindingsAccessor, viewModel);
}
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
if (typeof ko.bindingHandlers.options.update !== 'undefined') {
ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor, viewModel);
}
var instance = $.data(element, 'selectmenu');
if (instance) {
$(element).selectmenu('refresh', true);
}
}
};
本品採用天然options
結合,但除此之外,它會自動刷新更改後的選擇列表列表值。然而,當我改變選定的值時,這有一個問題。如果我第一次設置列表值,我的jqmOptions刷新選擇列表,但在那一點上,選定的值尚未設置。我最終得到了一個選擇列表,其中包含所有正確的值,並在內部選擇了正確的選項,但jQuery Mobile仍然顯示默認值爲選中狀態。
this.values(someArrayOfValues);
this.selectedValue(oneOfTheArrayValues);
淘汰賽不允許我先設置選擇的值,然後設置列表中的值,因爲在這種情況下,有沒有允許值時,我設置選定的值。因此選定的值總是未定義的。
是否有寫淘汰賽自定義綁定這將刷新選擇列表中的元素在這兩種情況下的方式:改變列表值和改變選擇的值時,是什麼時候?
目前我解決這種情況與下面的代碼:
this.values(someArrayOfValues);
this.selectedValue(oneOfTheArrayValues);
this.values(someArrayOfValues);
這是不是很優雅的解決方案然而,我想解決這個問題更好。
查看本博客文章:http://pieterderycke.wordpress.com/2012/09/22/creating- a-custom-knockout-binding-for-the-jquery-mobile-listview /它解釋了jQuery Mobile的自定義列表視圖綁定。 – MuSTaNG 2012-10-22 05:24:21