カスタム ウィジェットがDojoでフォーカスされているかどうかを確認するにはどうすればよいですか?
Dojo エディターを持っていますが、エディターが既にフォーカスされているかどうかを知りたいですか?
タイトルの質問は、説明の回答とは異なります。
Dojo のfocusUtil ("dijit/focus")を使用して、タイトルの質問を達成する方法は 2 つあります。どちらの方法でも、それを使用してウィジェットと dijit のレジストリ ("dijit/registry")を見つけることができます。
focusUtil.curNode
: 現在フォーカスがある DOM ノードを示します。以下の関数で、ウィジェット参照を取得できます。
function getWidgetByNode(node){
var result;
while (!result && node){
result = registry.byNode(node);
if (node.parentElement)
node = node.parentElement;
else
node = null;
}
return result;
}
var focusedWidget = getWidgetByNode(focusUtil.curNode)
focusUtil.activeStack
: フォーカスのあるウィジェット (親から子) の配列を提供します。したがって、配列の最後の項目は、フォーカスのある直接ウィジェットです。インデックス値はウィジェット ID であるため、次のコードでウィジェットを取得する必要があります
var focusedWidgetId = focusUtil.activeStack[focusUtil.activeStack.length-1];
var focusedWidget = registry.byId(focusedWidgetId);
現在フォーカスされているウィジェットが特定のものであるかどうかを知りたい場合は、その特定のウィジェットから何を手に持っているかによって異なります。
ウィジェット自体: 上記のサンプルの戻り値のように。これらが同じものであるかどうかを比較する必要があります。==
演算子を使用して 2 つのウィジェット オブジェクトを比較することはできません。次のように ID を比較できます。
myWidget.id == focusedWidget.id
ウィジェットの id:この方法では、現在のノードの id を focusUtil から簡単に取得し、それを次のように持っている id と比較します:
myWidgetId == focusedWidgetId
参照:
http://dojotoolkit.org/reference-guide/1.9/dijit/focus.html
http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html