मैं उसी प्रोजेक्ट में नॉकआउट (संस्करण 2.0) और jQuery मोबाइल (संस्करण 1.0.1) दोनों का उपयोग कर रहा हूं। समस्या सूची चुनने के लिए बाध्यकारी डेटा के साथ समस्या है। jQuery मोबाइल एक ऐसे तरीके से चयन सूचियों को प्रस्तुत करता है जहां प्रतीत होता है चयनित मूल्य और वास्तविक सूची अलग-अलग तत्व हैं। यहनॉकआउट और jQuery मोबाइल: सूचियों का चयन करने के लिए बाध्यकारी डेटा
$(element).selectmenu('refresh', true);
या तो सूची या चयनित मान को बदलने के बाद निष्पादित किया गया है। मेरे अनुभव के आधार पर, यह एक खतरनाक स्थिति है क्योंकि डेवलपर्स अक्सर चयन सूची को रीफ्रेश करना भूल जाते हैं।
इसे कम करने के लिए, मैंने अपना खुद का नॉकआउट बाइंडिंग हैंडलर लिखा था।
<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 मोबाइल अभी भी डिफ़ॉल्ट मान को चयनित के रूप में प्रदर्शित करता है।
this.values(someArrayOfValues);
this.selectedValue(oneOfTheArrayValues);
नॉकआउट मुझे पहले से चयनित मान सेट करने और फिर सूची मूल्यों की स्थापना, क्योंकि इस मामले में जब मैं चयनित मान सेट कर रहा हूं कोई अनुमति प्राप्त मान रहे हैं अनुमति नहीं है। इस प्रकार चयनित मूल्य हमेशा अपरिभाषित होता है।
क्या नॉकआउट कस्टम बाइंडिंग लिखने का कोई तरीका है जो दोनों मामलों में चयन सूची तत्व को रीफ्रेश करेगा: जब सूची मूल्य बदलते हैं और चयनित मान बदलते हैं? तथापि
this.values(someArrayOfValues);
this.selectedValue(oneOfTheArrayValues);
this.values(someArrayOfValues);
यह बहुत सुंदर समाधान नहीं है और मैं इसे बेहतर हल करने के लिए करना चाहते हैं:
वर्तमान में मैं निम्नलिखित कोड के साथ इस स्थिति का समाधान।
इस ब्लॉग आलेख पर एक नज़र डालें: http://pieterderycke.wordpress.com/2012/09/22/creating- एक-कस्टम-नॉकआउट-बाध्यकारी-के-द-जेक्वायरी-मोबाइल-लिस्टव्यूव/यह jquery मोबाइल के लिए बाध्यकारी कस्टम सूचीदृश्य बताता है। – MuSTaNG