2016-09-13 5 views

答えて

1

することができますが、いくつかの追加ステップが必要です。
基本的には、ロジックは です。ノードをクリックすると、属性がwidgetId のノードが見つかるまで、DOMに移動する必要があります。持っている場合は、dijit/registry::byNodeを使用してウィジェットを取得してください。

ノードトラバーシングをスキップすると、ウィジェットのメインdomNodeがクリックされた場合にのみウィジェットが見つかります。

require(['dojo/on', 'dijit/registry'], function(on, registry){ 
    on(document, 'click', function(event){ 
     var target = event.target, 
      widget; 
     while(!target.getAttribute('widgetId') && target.parentNode) { 
      target = target.parentNode; 
     } 
     widget = registry.byNode(target); 
     console.warn(widget); 
    }); 
}); 

注意してくださいあなたがページでのロードされた1つの道場のインスタンスを持っている場合は、この方法は、ONLYに動作します。
ページに複数のdojoインスタンスがある場合は、documentclickイベントをすべてのdojoインスタンスによって添付する必要があります。

+0

複数のdojoインスタンスが何を意味していますか? – erotavlas

+0

これは動作しますが、別のウィジェットを含むウィジェットをクリックすると、最も内側のウィジェットだけが返されることがわかりました。たとえば、dijitフォーム要素を含むカスタムウィジェットは、カスタムウィジェットをクリックした場所に応じてフォーム要素ウィジェットを返します。 – erotavlas

+0

いくつかの設定では、複数のDojoバージョンを同じページにロードできます。それがあなたの場合、この方法でウィジェットを取得することはできません。 明らかにdijitはウィジェットなので、内部ノードをクリックすると見つけることができます。特定のタイプのウィジェットを見つける必要がある場合は、 'registry.byNode(target);'が検索するクラスの 'instanceof'を返すまでノード内で続けなければなりません – ben

1

は、オーバーヘッドの多くなる可能性があります(ページの任意の場所にマウスクリックで)このような何かを行うことがしたいが、そうすることができます

require(["dojox/mobile/deviceTheme","dojo/on","dijit/registry"],function(theme,on,reg){ 
    on(document,'click', function(e){ 
    console.log(e.target); 
    var widget = reg.byNode(e.target); 
    console.log("foundWidget::" + widget.id); 
    }); 
}); 
+0

なぜ 'dojox/mobile/deviceTheme'が必要なのですか? – ben

+0

必須ではありません、テストコードの一部ですので、私はCSSを取得します。https://jsfiddle.net/omqmLb1s/ – tik27

関連する問題