12

Dojoを使用して、システムにユーザーを作成するための簡単なダイアログを作成しています。問題は、エラーが発生することです。

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

user_submit、はDojoボタンです。ダイアログ内のフォームを完成させる必要があります。ダイアログをクリックしてフォームを送信してダイアログを閉じると、ダイアログを再度開くことに問題はありません(ボタンのクリックイベントには、次のコード行があります。

dijit.byId("user_submit").destroy();

しかし、右上隅にある[x] -link /ボタンを使用してダイアログを閉じた場合、ボタンを破棄せず、ページをリロードせずにダイアログを再度開くことはできません。

Dojoにボタンを破棄させる方法、または[X] -link / buttonのクリックイベントをオーバーロードして、ボタンのdestroyコマンドを記述できるようにするにはどうすればよいですか?

4

5 に答える 5

17

"Developer shouldn't override or connect to this method"「onCancel」については、ドキュメントを参照してください。より良い解決策は次のとおりです。

var myDialog = new Dialog({
   id: "myDialogId1",
   onHide: function() {
      myDialog.destroy()
   }
});
于 2014-04-02T11:54:55.873 に答える
9

解決策を見つけました。dojo.connect()を使用します。

myDialog.connect(myDialog, "hide", function(e){
    dijit.byId("user_submit").destroy(); 
});

質問を投稿した直後にこれを投稿しただろうが、十分なポイントがなかったので、ここにもう一度答えがあります、少し遅れて:-)

于 2012-04-19T13:09:03.857 に答える
3

IIRC、onCloseXのものをクリックすると拡張イベントが呼び出されるので、そこにクリーンアップコードを配置してみてください。


問題を完全に回避することも検討できます。おそらく、ウィジェットを破棄する必要はなく、代わりに同じウィジェットを再利用できますか?ウィジェットを再度作成する前にウィジェットの存在テストを実行して、古いバージョンがまだ生きている場合は破棄することもできます。

于 2012-04-18T20:18:15.517 に答える
1

onCancel()上記のようにメソッドを オーバーライドするか、イベントをdijit.dialog.closeButtonNodedomElementにアタッチできます。 閉じるボタンの属性dijit.dialog.closeButtonNodeの名前です。data-dojo-attach-point

Exp:

dojo.on(dijit.Dialog.closeButtonNode, "click", function(evt){
      //add your logic here
});
于 2015-09-03T07:34:01.943 に答える
-1

ダイアログの上部にあるXを押すと、「onCancel」イベントがトリガーされます。

そこに要素を処分します。

于 2014-03-11T09:54:45.203 に答える