2012-09-18 22 views
9

इस जैसे एक आईडी और डोजो टैग में एक डाटा-डोजो-आईडी बीच क्या अंतर है:अंतर

<button id="save" data-dojo-type="dijit/form/Button" type="button" data-dojo-attach-event="onClick:save">Save</button> 

मैं इस बटन को संदर्भित करने के लिए यह है परिवर्तित करने का प्रयास लेबल के साथ: var myButton = dijit.byId ("सहेजें"); ताकि मैं बटन लेबल myButton.set ("लेबल", "नया जोड़ें") बदल सकता हूं;

यदि मैं आईडी = "सेव" का उपयोग करता हूं तो यह काम करता है। अगर मैं केवल डेटा-डोजो-आईडी = "सेव" का उपयोग करता हूं तो यह काम नहीं करता है।

मैं दोजो के लिए बिल्कुल नया हूं इसलिए एक स्पष्टीकरण या ट्यूटोरियल जो आपको इंगित कर सकता है, उसकी सराहना की जाएगी!

उत्तर

12

data-dojo-id ग्लोबल नेम स्पेस में विजेट प्रदान करती है, यानी window वस्तु में:

save.set("label", "Add New"); 

jsFiddle पर कार्रवाई में अंतर देखें:: http://jsfiddle.net/phusick/7yV56/

<button data-dojo-id="save" data-dojo-type="dijit/form/Button">Save</button>​ 

ताकि आप सीधे बटन का उपयोग कर सकते

संपादित करें: अपने प्रश्नों के उत्तर देने के लिए। मैं data-dojo-id का उपयोग नहीं करता हूं। यह वैश्विक नामस्थान को प्रदूषित करता है जो कि एएमडी के विपरीत है। वैसे भी, आप अभी भी कुछ widgets.save और widgets.rename तरह प्रदूषण कम करने के लिए उपयोग कर सकते हैं:

<button data-dojo-id="widgets.save" data-dojo-type="dijit/form/Button">Save</button>​ 
<button data-dojo-id="widgets.rename" data-dojo-type="dijit/form/Button">Rename</button>​ 

IMO, data-dojo-id, progressive enhancement के लिए है पूरी तरह से विकसित अनुप्रयोगों के लिए नहीं।

data-dojo-id बस एक चर के लिए एक उदाहरण निर्दिष्ट करता है, इसलिए एक ही data-dojo-id के साथ कई डिजीट्स के साथ वैरिएबल आखिरी एक को निर्दिष्ट करेगा (यानी यह एक सरणी नहीं होगी)।

आप registry.byId के व्यापक उपयोग से बच सकते हैं अपनी आवश्यकताओं के अनुसार विजेट प्राप्त करने के लिए अपनी विधि लिख रहे हैं। शुरू करने का सबसे अच्छा तरीका dijit/registy.findWidgets(rootNode, skipNode) है। भी कृपया ध्यान दें, कि dojo/parser.parse(rootNode, options) instantiated ऑब्जेक्ट की श्रृंखला, या अधिक सटीक रिटर्न:

एक मिश्रित उद्देश्य यह है कि instantiated वस्तुओं, की एक सरणी है देता है लेकिन यह भी एक वादा है कि instantiated साथ हल हो गई है शामिल कर सकते हैं वस्तुओं। यह पिछड़ा संगतता के लिए किया जाता है। यदि पार्सर ऑटो-मॉड्यूल की आवश्यकता है, तो यह हमेशा एक वादा फैशन में व्यवहार करेगा और parser.parse().then(function(instances){...}) का उपयोग किया जाना चाहिए।

एक विधि मैं अपने widgets संपत्ति है, जो एक वस्तु है में contentPane के dijits आवंटित करने के लिए उपयोग करने का एक उदाहरण:

_attachTemplateWidgets: function(widgets) { 
    widgets = widgets || this.getChildren(); 
    for(var each = 0; each < widgets.length; each++) { 
     var widget = widgets[each]; 
     var attachPoint = widget.params.dojoAttachPoint; 
     if(attachPoint) { 
      this.widget[attachPoint] = widget; 
     } 

     var children = widget.getChildren(); 
     if(children.length > 0) { 
      this._attachTemplateWidgets(children); 
     } 
    } 
} 

मैं यहाँ पूरी क्लास डाल: https://gist.github.com/3754324। मैं dijit/layout/ContentPane के बजाय इस app.ui._Pane का उपयोग करता हूं।

+0

धन्यवाद फुसिक! केवल आईडी विशेषता का उपयोग करने के लिए डीओएम हुक प्राप्त करने के लिए आईआईडी विधि का उपयोग करने की आवश्यकता होती है।अब मुझे आश्चर्य है कि डोजो मॉड्यूल में उपयोग के लिए कौन सा बेहतर है जहां आप कई उदाहरण बना रहे हैं। क्या डेटा-डोजो-आईडी आंतरिक रूप से प्रबंधन की देखभाल करता है, इसलिए एक उदाहरण पहचान किसी अन्य के साथ भ्रमित नहीं हो रही है? – teaman