Как узнать, имеет ли мой пользовательский виджет фокус в Dojo?Dojo: как найти, если виджет имеет фокус в dojo
У меня есть редактор dojo, чтобы узнать, сосредоточен ли редактор или нет?
Как узнать, имеет ли мой пользовательский виджет фокус в Dojo?Dojo: как найти, если виджет имеет фокус в dojo
У меня есть редактор dojo, чтобы узнать, сосредоточен ли редактор или нет?
вы можете использовать модуль Dijit/фокус, чтобы выяснить фокусировку
ИЗ DOJO DOCS
отслеживания активных виджетов
В любой момент времени существует множество (из-за отсутствия лучшего слова) «активные» или «сфокусированные» виджеты, что означает теперь сфокусированный виджет и предки этого виджетов. «Предки» могут означать либо DOM ancestor (например: TextBox -> Form), либо логическое соотношение родитель-потомок (например: TooltipDialog -> DropDownButton).
Например, если фокус находится на TextBox внутри TabContainer внутри TooltipDialog, вызванного DropDownButton, стек будет TextBox -> ContentPane -> TabContainer -> TooltipDialog -> DropDownButton.
activeStack [] параметр указывает этот набор виджетов и приложение может отслеживать изменения в activeStack [] по:
require([ "dijit/focus" ], function(focusUtil){ focusUtil.watch("activeStack", function(name, oldValue, newValue){ console.log("Focused widget + ancestors: ", newValue.join(", ")); }); });
требуют ([ "Dijit/фокус"], функция (focusUtil) {
var activeElement = focusUtil.curNode; // возвращает null, если нет сфокусированного элемента
});
проверка удар URL здесь вы можете увидеть некоторые примеры http://dojotoolkit.org/reference-guide/1.8/dijit/focus.html#dijit-focus
вопрос в названии имеет другой ответ, чем тот, в описаниях.
Есть два пути достижения вопроса в названии, используя dojo's focusUtil («dijit/focus»). оба способа дают вам что-то, что вы могли бы найти в нем виджета и реестр 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
: дает множество виджетов (родителя к ребенку), который имеет фокус. поэтому последний элемент массива - это прямой виджет, который имеет фокус.значения индекса Идентификаторы виджетов, так что вы должны получить виджет следующего кода
var focusedWidgetId = focusUtil.activeStack[focusUtil.activeStack.length-1];
var focusedWidget = registry.byId(focusedWidgetId);
теперь, если вы хотите знать, если внимание в настоящее время виджет некоторые конкретные один, это зависит от того, что вы имеете в руках из этого конкретного виджета:
сам виджет: как возвращаемых значений указанных выше образцов. теперь вы должны сравнить, если это одно и то же. вы не можете сравнить два объекта виджета с помощью оператора ==
. Вы могли бы сравнить их идентификаторы, как это: идентификатор
myWidget.id == focusedWidget.id
виджета: таким образом, вы просто легко получить идентификатор текущего узла из focusUtil и сравнить его с идентификатором у вас есть Лик это:
myWidgetId == focusedWidgetId
ссылки:
http://dojotoolkit.org/reference-guide/1.9/dijit/focus.html
http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html
, но используя это, как я могу проверить, имеет ли мой пользовательский виджет фокус? –
, пожалуйста, приведи пример. –