することができますが、いくつかの追加ステップが必要です。
基本的には、ロジックは です。ノードをクリックすると、属性が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インスタンスがある場合は、document
click
イベントをすべてのdojoインスタンスによって添付する必要があります。
出典
2016-09-14 07:09:58
ben
複数のdojoインスタンスが何を意味していますか? – erotavlas
これは動作しますが、別のウィジェットを含むウィジェットをクリックすると、最も内側のウィジェットだけが返されることがわかりました。たとえば、dijitフォーム要素を含むカスタムウィジェットは、カスタムウィジェットをクリックした場所に応じてフォーム要素ウィジェットを返します。 – erotavlas
いくつかの設定では、複数のDojoバージョンを同じページにロードできます。それがあなたの場合、この方法でウィジェットを取得することはできません。 明らかにdijitはウィジェットなので、内部ノードをクリックすると見つけることができます。特定のタイプのウィジェットを見つける必要がある場合は、 'registry.byNode(target);'が検索するクラスの 'instanceof'を返すまでノード内で続けなければなりません – ben