2013-03-09 5 views
13

मैं बैकबोन के पीछे के निर्णयों को समझना चाहता हूं। यूआई तत्वों के बारे में मैरियनेट के विचार। जब एक मौजूदा डोम तत्व पर एक Marionette.View instantiating, इस तरह:Marionette में UI तत्वों की उपलब्धता। देखें

view = new Marionette.ItemView({ 
    el: "#element", 
    ui : { 
     whatever : "#whatever" 
    } 
}); 

मैं view.$el, view.initialize अंदर jQuery चयनकर्ता का उपयोग करने में सक्षम हूँ, अब तक तो अच्छा। हालांकि, जब मैं view.ui.whatever तक पहुंचने का प्रयास करता हूं, तो मेरे पास केवल चयनकर्ता तक पहुंच है, यानि वास्तविक $("#whatever") jquery चयनकर्ता के बजाय स्ट्रिंग "# जो भी" है।

इसका कारण यह है क्योंकि Marionette.View.bindUIElements() केवल render पर और initialize से पहले नहीं कहा जाता है।

मुझे यह जानना है कि क्या आपको लगता है कि यह व्यवहार तर्क है और क्यों?

यदि मैं टेम्पलेट के साथ दृश्य बनाया गया है, तो मैं केवल मौजूदा el पर दृश्य को जोड़ने के मामले में पूछ रहा हूं, मुझे समझ में आता है कि बाइंडिंग render() में क्यों है।

+0

यह एक साइड नोट है - यदि आप पेज पर वापस जाने के लिए बैक बटन पर क्लिक करते हैं तो आप व्यवहार का भी अनुभव करेंगे। ui तत्व का उपयोग करने से पहले 'this.bindUIElements()' को कॉल करना हल किया गया है जो – Phil

उत्तर

25

मौजूदा तत्व को देखने को अपवाद अपवाद है। सामान्य दृश्य जीवन चक्र में render पर कॉल करना शामिल है, और ऐसा करने के बिना यूआई तत्वों को बांधने के लिए कुछ भी नहीं होगा।

अपने initialize विधि में बस this.bindUIElements() पर कॉल करें जब आपको किसी मौजूदा तत्व को देखने की आवश्यकता हो।

+0

जारी करता है, यही वह है जो मैं कर रहा हूं, मैं बस सोच रहा था कि मौजूदा तत्व को जोड़ने के मामले में डिफ़ॉल्ट रूप से ऐसा क्यों नहीं किया गया था। मुझे एहसास नहीं हुआ कि इसे मैरियनेट के दर्शन में एक असाधारण मामला माना जाता था। आपके उत्तर के लिए धन्यवाद। – alistril

+0

डाइविंग गहरा, क्या 'मैरियनेट.इटेम व्यू' का उपयोग करने का एक तरीका है और इसे पूर्व-मौजूदा डोम का 'एल' पास कर दिया गया है? ऐसा लगता है कि आपको हमेशा 'el' खुद को प्रस्तुत करना होगा। –

+0

प्रारंभिक अंदर के अंदर .bindUIElements() को कॉल करना @ ui.something के साथ 'ट्रिगर्स' का उपयोग करते समय jquery तोड़ना प्रतीत होता है, क्योंकि समय प्रतिनिधि द्वारा इसे बुलाया जाता है, इस.ui में तत्व अब स्ट्रिंग्स नहीं हैं, jquery selectos तोड़ रहे हैं। क्या ऐसा करने के लिए इससे अच्छा तरीका है? वर्तमान में मैं दृश्य बनाने के बाद bindUIElements को कॉल कर रहा हूं, लेकिन यह सही नहीं लगता है – Asgaroth

1

जब मैं मैरियनेट के साथ काम कर रहा हूं, तो मैंने कोड डाल दिया है जिसे ऑनशो विधि के अंदर ui तत्वों तक पहुंचाना है। डोम तैयार होने के बाद यह घटना निकाल दी जाती है और तत्वों को छेड़छाड़ करने के लिए तैयार होते हैं। इस विधि के अंदर, आपका यूई जो भी अब एक तत्व को इंगित करेगा, न कि एक स्ट्रिंग।

+0

हां लेकिन ऑनशो का तात्पर्य है कि मेरे पास एक रेंडर है जो बदले में दर्शाता है कि मेरे पास टेम्पलेट है। मेरे मामले में मेरे पास न तो इतना है कि शो कभी नहीं निकाल दिया जाएगा, है ना? – alistril

+0

मैं टेम्पलेट के बिना काम करने के लिए आइटमव्यू प्राप्त करने में सक्षम हूं लेकिन ऑनशो के अंदर यूआई सामग्री लोड नहीं हो रही है। तो मुझे लगता है कि इस तरह से ऐसा करने का कोई अच्छा तरीका नहीं है।मेरा अन्य सुझाव दृश्य का उपयोग करना होगा। $ El.find ("# जो भी")। यह आपको टेम्पलेट के बिना उस तत्व तक पहुंच प्रदान करना चाहिए या प्रस्तुत करना चाहिए। – Kalpers

संबंधित मुद्दे