2010-05-04 6 views
26

मैं दोजो टूलकिट में नया हूं। जब भी मैं दो बार (एक कंटेनर div में jQuery.Load के माध्यम से मैं लोड HTML सामग्री अर्थ) डोजो सामग्री लोड करने की कोशिश मैं त्रुटिदोजो और अपंजीकृत विजेट

Tried to register widget with id=myButton but that id is already registered 

हो रही है। क्या डोजो में पहले से पंजीकृत विगेट्स को अनधिकृत करने का कोई तरीका है? मैंने कुछ उदाहरण देखे हैं, लेकिन मैं वास्तव में उन्हें काम नहीं कर रहा हूं।

मेरे बटन:

<button dojoType="dijit.form.Button" id="myButton">button</button> 

उत्तर

35

आप विशिष्ट विजेट का पंजीकरण रद्द करना चाहते हैं, तो आप उपयोग कर सकते हैं उनके destroy() या destroyRecursive() विधियां। दूसरा व्यक्ति आपके द्वारा नष्ट किए जा रहे किसी भी विजेट को नष्ट कर देता है (यानी नष्ट करना कॉल करना एक फॉर्म विजेट पर रिकर्सिव सभी फॉर्म घटकों को भी नष्ट कर देगा)।

आपके मामले में, यह लग रहा है आपका सर्वश्रेष्ठ दांव की तरह से पहले jQuery.load यह करने के लिए हो सकता है - ऊपर कोड

var widgets = dijit.findWidgets(<containerDiv>); 
dojo.forEach(widgets, function(w) { 
    w.destroyRecursive(true); 
}); 

<containerDiv>, और में सभी विजेट का पंजीकरण रद्द होगा उनके संबद्ध DOM नोड्स की रक्षा। डीओएम नोड्स को नष्ट करने के लिए, false से destroyRecursive को इसके बजाय पास करें।

संदर्भ:

http://dojotoolkit.org/api/1.3/dijit/_Widget/destroyRecursive

+1

अन्य समाधान ढूंढ रहे हैं: गैर-पुनरावर्ती समाधान के लिए नीचे भी जवाब देखें। –

+0

बिल्कुल वही जो मैं खोज रहा था। बहुत बहुत धन्यवाद! – mtchuente

10

पर http://bugs.dojotoolkit.org/ticket/5438 आधार पर, मैं डोजो-विगेट्स को नष्ट करने के लिए पर्याप्त रास्ता मिल गया:

dijit.registry.forEach(function(w){ 
        w.destroy();    
      }); 
4

यह मेरे लिए काम किया:

dijit.byId('myButton').destroy(true); 
1

मुझे लगता है कि आप अपने बटन से आईडी को दूर करने और एक संलग्न बिंदु का उपयोग कर उस तक पहुंचने में बंद बेहतर होगा। आप मूल रूप से <button dojoType="dijit.form.Button" data-dojo-attach-point="myButton">button</button>

फिर अपने कोड में आप इसे this.myButton.... जैसे एक्सेस करेंगे, हालांकि मुझे यकीन नहीं है कि आप किस डोजो का उपयोग कर रहे हैं। इससे किसी भी आईडी समस्या ठीक हो जाएगी क्योंकि डोजो स्वचालित रूप से एक अद्वितीय आईडी असाइन करेगा।