barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

воскресенье, 14 апреля 2013 г.

dijit: отображения toolip`а ValidationTextBox`а рядом с другим элементом

Задача:

Сделать так, чтобы подсказка ValidationTextBox`а отображалась не рядом с ним, а рядом с другим dom-узлом. В моем случае я хочу вместо:
получить:

Решение:

Переопределить у ValidationTextBox метод displayMessage таким образом, чтобы методу Tooltip.show() он передавал не текущий узел, а некоторый другой. Этот самый "другой" узел я вынес в отдельное свойство:
define("my/form/ValidationTextBox", [
"dojo/_base/declare",
"dijit/form/ValidationTextBox",
"dijit/Tooltip"
], function(declare, ValidationTextBox, Tooltip){
var ValidationTextBoxExt;
return ValidationTextBoxExt = declare("my/form/ValidationTextBox", ValidationTextBox, {
/**
* Узел для отображения подсказки
*/
tooltipAroundNode: null,
  /** * Отображает подсказку рядом с текущим элементом, * если tooltipAroundNode = null, либо с заданным * в tooltipAroundNode элементом */
displayMessage: function(/*String*/ message){
if(message && this.focused){
Tooltip.show(message, this.tooltipAroundNode==null?this.domNode:this.tooltipAroundNode, this.tooltipPosition, !this.isLeftToRight());
}else{
Tooltip.hide(this.tooltipAroundNode==null?this.domNode:this.tooltipAroundNode);
}
} });
});
Теперь остается лишь где-то в коде установить этот самый tooltipAroundNode:
require(["dijit/registry"], function(registry) {
     registry.byId("my-input").set("tooltipAroundNode",registry.byId("my-button").domNode);
}

Комментариев нет:

Отправить комментарий