Ответ 1
Мне удалось сохранить подсказку, переопределив некоторые обработчики событий в Ext.slider.Tip
:
Ext.define('AlwaysVisibleTip', {
extend: 'Ext.slider.Tip',
init: function(slider) {
var me = this;
me.callParent(arguments);
slider.removeListener('dragend', me.hide);
slider.on({
scope: me,
change: me.onSlide,
afterrender: function() {
setTimeout(function() {
me.onSlide(slider, null, slider.thumbs[0]);
}, 100);
}
});
}
});
Ext.create('Ext.slider.Single', {
animate: false,
plugins: [Ext.create('AlwaysVisibleTip')],
// ...
});
Просмотрите демонстрацию .
Недостатки моего подхода:
- Он использует частный метод
onSlide
- Он применим только к одиночному слайдеру
- Навигация по клавиатуре работает правильно, только если
animate
установлен наfalse
-
setTimeout
используется для настройки начального положения наконечника
Для устранения этих недостатков потребуется взломать класс Ext.slider.Tip
, но Ext.slider.Multy
и, возможно, Ext.slider.Thumb
.
Изменить
Заменено событие changecomplete
событием change
, поскольку changecomplete
не запускается, когда вызывается slider.setValue()
.
Добавлена демонстрация слайдера со смежными кнопками.
Edit2
tipText
config больше не применяется, если используется настраиваемый плагин. Вы должны использовать getText config плагина:
Ext.create('Ext.slider.Single', {
animate: false,
plugins: [Ext.create('AlwaysVisibleTip',{
getText: function(thumb) {
var months = ['','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
return Ext.String.format(months[thumb.value]);
}
})],
// ...
});
Обновлена демонстрационная версия .