web-dev-qa-db-ja.com

Dojoとウィジェットの登録解除

Dojo Toolkitは初めてです。エラーが出ます

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

dojoコンテンツを2回ロードしようとするたびに(つまり、jQuery.Loadを介してHTMLコンテンツをコンテナーdivにロードします)。 dojoで既に登録されているウィジェットを登録解除する方法はありますか?いくつかの例を見てきましたが、実際には機能していません。

私のボタン:

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

特定のウィジェットの登録を解除したい場合は、それらのdestroy()またはdestroyRecursive()メソッドを使用できます。 2つ目は、破棄するウィジェット内のウィジェットを破棄します(つまり、フォームウィジェットでdestroyRecursiveを呼び出すと、すべてのフォームコンポーネントも破棄されます)。

あなたの場合、jQuery.load-の前にこれを行うことが最善の策であると思われます

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

上記のコードは、<containerDiv>のすべてのウィジェットの登録を解除し、関連付けられたDOMノードを保持します。 DOMノードを破棄するには、代わりにfalsedestroyRecursiveに渡します。

参照:

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

37
Jez

http://bugs.dojotoolkit.org/ticket/5438 に基づいて、dojo-widgetsを破壊する十分な方法を見つけました。

dijit.registry.forEach(function(w){
                  w.destroy();             
          });
10
John Korsnes

これは私のために働きました:

dijit.byId( 'myButton' ).destroy( true );
5
Kds

ボタンからIDを削除し、アタッチポイントを使用してアクセスする方がよいでしょう。あなたは基本的に<button dojoType="dijit.form.Button" data-dojo-attach-point="myButton">button</button>を行います

次に、コードでthis.myButton....のようにアクセスしますが、使用しているdojoのバージョンがわかりません。 dojoは自動的に一意のIDを割り当てるため、これによりIDの問題が修正されます。

1
Mike Eddy