Подтвердить что ты не робот

Как добавить всплывающую подсказку к компоненту ExtJS?

Я создаю компонент ExtJS, и я хочу, чтобы он использовал подсказку QuickTips. Если я создаю элемент с помощью DomHelper, я могу установить всплывающую подсказку, без пота. Если, однако, я создаю компонент, например

new BoxComponent({
  qtip: "This is a tip"
});

ничего не происходит. Я также попытался назвать свойство "подсказка", но не повезло. Есть ли правильный способ сделать это? Теперь я вижу, что работает

new BoxComponent({
  qtip: "This is a tip",
  listeners: {
    rendered: function(c){
      Ext.QuickTips.register({
        target: c.getEl(),
        text: c.qtip
      }
    }
});

Я чувствую, что это неправильно. Я предполагаю, что я мог бы просто расширить компонент, чтобы делать это автоматически, но, похоже, достаточно распространенный случай, когда я могу сделать это, не выкапывая под капотом, как это.

4b9b3361

Ответ 1

Я думаю, вы делаете это абсолютно правильно. Я действительно не вижу необходимости в QuickTips в произвольных Компонентах, особенно в Контейнерах, поскольку это может привести к нескольким подсказкам в пределах одного и того же Компонента.

Ответ 2

В ExtJS 4.2.1 я могу добавить подсказку к флажку следующим образом:

new Ext.form.field.Checkbox({
  ...
  tip: 'This is a tip',
  listeners: {
    render: function(c) {
      Ext.create('Ext.tip.ToolTip', {
        target: c.getEl(),
        html: c.tip 
      });
    }
  });

Ответ 3

Он должен работать:

new BoxComponent({
 tooltip: new Ext.ToolTip({
        title: 'Example Tooltip title',
            text: 'Example Tooltip text'

    }),
  listeners: {
    rendered: function(c){
      Ext.QuickTips.register({
        target: c.getEl(),
        text: c.qtip
      }
    }
});

Ответ 4

Хмм. Я посмотрел, как это делает Ext.Button с передачей tooltip в конфигурацию, вызывающую setTooltip под капотом.

Неподтвержденный, но я думаю, что ваш лучший выбор - это что-то вроде:

Ext.Component.prototype._onRender = Ext.Component.prototype.onRender;
Ext.override(Ext.Component, {
  onRender: Ext.Component.prototype._onRender.createSequence(function(ct, position) {
    // setTooltip code adapted from Ext.Button, looking at tooltip property
  });
});

Ответ 5

Я думаю, что это лучший способ в Extjs 4:

вы должны добавить прослушиватель afterrender, тогда, когда компонент yor уже создан, вы можете добавить всплывающую подсказку следующим образом:

listeners : {
    afterrender : function(obj) {
        if (this.max != null && this.ave != null && this.min != null) {
            obj.tip = Ext.create('Ext.tip.ToolTip', {
                        target : obj.getEl().getAttribute("id"),
                        trackMouse : true,
                        renderTo : document.body,
                        html : this.htmlTip,
                        title : this.title
                    });
        }
    }
}

Надеюсь, это поможет.

Ответ 6

Я всегда использую этот путь в ExtJs 3

listeners: {
    render: function(c) {
        Ext.QuickTips.register({
            target: c,
            text: 'Enter \'-1\' for a 1 time only'
        });
    }
}

Ответ 7

Этот способ работает отлично! Попробуй! (Extjs 4.2)

var boxComponent = Ext.create('Ext.Component', {
  id: 'id111',
  html: '<img src="js/extjs/resources/cb-theme/images/shared/icon-question.png">',
  width: 20,
  height: 20,
  margin: '0 0 0 10'
});

Ext.tip.QuickTipManager.init();

Ext.tip.QuickTipManager.register({
  target: 'id111',
  title: 'My Tooltip',
  text: 'This tooltip was added in code',
  width: 100,
  dismissDelay: 10000 // Hide after 10 seconds hover
});

Ответ 8

Самый простой способ - установить атрибут data-qtip для основного элемента компонента:

{
    xtype: 'box',
    autoEl: {
        'data-qtip': "Tooltip text"
    }
}

Обязательно включите qtips при запуске приложения:

Ext.tip.QuickTipManager.init();

Ответ 9

{
    xtype: 'checkbox',
    tip: 'This is a tip',
    listeners: {
        render: function(c) {
            Ext.create('Ext.tip.ToolTip', {
                target: c.getEl(),
                html: c.tip
            });
        }
    }
}