Ответ 1
Я думаю, вы делаете это абсолютно правильно. Я действительно не вижу необходимости в QuickTips в произвольных Компонентах, особенно в Контейнерах, поскольку это может привести к нескольким подсказкам в пределах одного и того же Компонента.
Я создаю компонент 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
}
}
});
Я чувствую, что это неправильно. Я предполагаю, что я мог бы просто расширить компонент, чтобы делать это автоматически, но, похоже, достаточно распространенный случай, когда я могу сделать это, не выкапывая под капотом, как это.
Я думаю, вы делаете это абсолютно правильно. Я действительно не вижу необходимости в QuickTips в произвольных Компонентах, особенно в Контейнерах, поскольку это может привести к нескольким подсказкам в пределах одного и того же Компонента.
В 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
});
}
});
Он должен работать:
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
}
}
});
Хмм. Я посмотрел, как это делает 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
});
});
Я думаю, что это лучший способ в 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
});
}
}
}
Надеюсь, это поможет.
Я всегда использую этот путь в ExtJs 3
listeners: {
render: function(c) {
Ext.QuickTips.register({
target: c,
text: 'Enter \'-1\' for a 1 time only'
});
}
}
Этот способ работает отлично! Попробуй! (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
});
Самый простой способ - установить атрибут data-qtip для основного элемента компонента:
{
xtype: 'box',
autoEl: {
'data-qtip': "Tooltip text"
}
}
Обязательно включите qtips при запуске приложения:
Ext.tip.QuickTipManager.init();
{
xtype: 'checkbox',
tip: 'This is a tip',
listeners: {
render: function(c) {
Ext.create('Ext.tip.ToolTip', {
target: c.getEl(),
html: c.tip
});
}
}
}