मैं जिसमें मैं इस तरह मेरे टेम्पलेट कॉल कोड करने के लिए है कई स्थितियों सामने आने वाले:विस्तारित वाक्य रचना
<!-- ko template: {name: 'paginatedList',
data: {listContainer: paginatedResults, itemTemplate: $parent.template}} -->
<!-- /ko -->
क्योंकि मेरे डेटा वस्तु के अलावा (जैसे, paginatedResults
), मैं प्रतिपादन वस्तुओं में उपयोग करने के लिए टेम्पलेट के नाम जैसे पूरक जानकारी में पास करने की आवश्यकता है। एक और उदाहरण के रूप में, किसी सूची में किसी आइटम को प्रतिपादित करते समय, मुझे किसी फ़िल्टर में वर्तमान फ़िल्टर को दूर से हटाए गए किसी संदर्भ में संग्रहीत फ़िल्टर की वर्तमान सेटिंग्स को जानने की आवश्यकता हो सकती है।
बल्कि (मेरे डेटा मॉडल बिगड़ना ऊपर के उदाहरण में हो रही है, {listContainer: paginatedResults, itemTemplate: $parent.template}}
साथ paginatedResults
की जगह की तुलना में, यह मेरे चारों ओर पारित करने के लिए अनुमति देता है कि टेम्पलेट्स पर वाक्य रचना का एक सा है (और acccrue के लिए अच्छा के रूप में टेम्पलेट्स पदानुक्रम मूल्यांकन किया जाता है होगा) कुछ अतिरिक्त संदर्भ है कि एक गहरा-नेस्टेड टेम्पलेट जब खुद प्रतिपादन आवश्यकता हो सकती है।
मुझे लगता है कि मैं क्या के बारे में सोच उन्हें की तरह लग रहे बनाने के लिए ko.bindingHandlers
कार्य (init
और update
) के लिए एक अतिरिक्त (वैकल्पिक) पैरामीटर जोड़ने की व्यवहार्यता है यह:
function (element,
valueAccessor,
allBindingsAccessor,
viewModel,
bindingContext,
context)
जब ऊपर के उदाहरण कोडिंग, मैं
<!-- ko template: {name: 'paginatedList',
data: paginatedResults,
itemTemplate: $parent.template} -->
<!-- /ko -->
और itemTemplate
की तरह कुछ
<!-- ko template: {name: 'paginatedList',
data: paginatedResults,
context: {itemTemplate: $parent.template}} -->
<!-- /ko -->
या बेहतर अभी तक, एक चर मैं नेस्टेड टेम्पलेट्स और data-bind
में उल्लेख कर सकते हैं बन कहने के लिए सक्षम होना चाहिए जिम्मेदार बताते हैं।
क्या यह समझ में आता है? मुझे अच्छी समझ नहीं है कि इसे लागू करना कितना मुश्किल होगा। मुझे लगता है कि नाम टकराव के बारे में चिंता करने की एक बात है, लेकिन कुछ नामकरण सम्मेलन उस पर बाधा डाल सकते हैं।
जीन
धन्यवाद! मैं मानता हूं कि यह सही चीज करता है, लेकिन एक अतिरिक्त बाध्यकारी हैंडलर वारंट करने के लिए पर्याप्त नहीं है। जटिल अनुप्रयोगों में यह पैटर्न कितनी बार आता है यह देखना दिलचस्प होगा। –
धन्यवाद यह मुझे बहुत मदद करता है।यदि मैं एक टेम्पलेट रैपर लिखता हूं, तो क्या मैं 'init' के अंदर टेम्पलेट नाम सेट कर सकता हूं? – tbruyelle
@tbruyelle - आप निश्चित रूप से नाम सेट कर सकते हैं। विचार यह होगा कि आपके रैपर बाध्यकारी के अंदर आप उन विकल्पों को बनाते हैं जिन्हें आप वास्तविक टेम्पलेट बाध्यकारी में पास करना चाहते हैं। यहां एक नमूना है जो आपको आवश्यकतानुसार थोड़ा अधिक सामान्य हो सकता है (आप केवल valueAccessor() ऑब्जेक्ट पर नाम सेट कर सकते हैं): http://jsfiddle.net/rniemeyer/7rcFD/ –