Как же работает fireViewEvent() в ViewController
Всем привет.
Пытаюсь создавать события с помощью fireViewEvent(), но ничто их не слышит. Есть своя таблица, наследованная от класса Ext.grid.Panel. Там по двойному клику, запускается событие this.fireViewEvent('vieworder'). Эта моя таблица вставлена в закладку таб-панели, закладки создаются динамически. Объявил слушателя в табпанели, но он ничего не слышит.
{
xtype: 'tabpanel',
region: 'center',
layout: 'fit',
reference: 'centerPanel',
listeners: {
vieworder: 'onCreateTab'
}
}
Как сделать, чтобы таб-панель услышала сообщение из вложенной таблицы в одну из её закладок? Как я понял fireViewEvent() слышит ViewController, находящийся выше в иерархии. У меня их всего два, один для таблицы, а второй самый главный, в View которого объявлена таб-панель. Как понять где теряется созданное событие, ну или может быть там какие-то скрытие ViewController, созданные системой и находящиеся между моими двумя? |
Попробовал не динамически создавать закладки, а явно и всё заработало.
{
xtype: 'tabpanel',
region: 'center',
layout: 'fit',
reference: 'centerPanel',
items:[{
xtype: 'orderGroup',
listeners: {
vieworder: 'onCreateTab'
}
}]
}
Как мне тоже самое сделать при динамическом создании закладок? Сейчас, скажем при нажатии кнопок, создаю новые закладки вызывая эту функцию:
this.createTab(record.raw.panel, record, {
xtype: record.raw.panel,
title: record.raw.text,
//listeners: {
// vieworder: function(view, record) {
//this.getController().fireViewEvent('vieworder', view, record);
// }
//},
});
Вот её реализация:
createTab: function (prefix, record, cfg) {
var tabs = this.lookupReference('centerPanel'),
id = prefix + '_' + record.getId(),
tab = tabs.items.getByKey(id);
if (!tab) {
cfg.itemId = id;
cfg.closable = true;
tab = tabs.add(cfg);
}
tabs.setActiveTab(tab);
},
Я попробовал добавить слушателя для каждой так созданной закладки, но эффект получается совершенно другой. (Я закомментировал тот участок как я это пытался делать). В этом случае событие перехватывает не закладка, а таблица внутри закладки. |
по мойму нужен очень краткий пример создания динамических вкладок в песочнице...
|
вы тоже также выкрутились? -> cfg.closable = true;
а где об этом прочитали? мне пришлось это просто наобум применить... |
Цитата:
|
Цитата:
Жаль только там вариант, когда они одну закладку заранее создали и уже из неё создают динамически другие при двойном клике по строке таблицы с билетами. По сути то что я как раз делаю, только у меня не должно быть уже готовых закладок при старте приложения как у них. |
в соседней ветке аналогичные траблы...
сделайте в песочнице - это в будущем для вас окупится!!! я с вашим примером позже смогу заняться, пока в соседней ветке работаю... потому некогда. |
Цитата:
|
Цитата:
Надо всё же убить день или два и создать пример. |
Как я понял TabPanel должна иметь изначально хотя бы одну закладку. Еще обратил внимание, что у Вас в центральном регионе стоит tabpanel, у которой layout: 'fit'... Вероятно эта строка конфига просто игнорируется при рендеринге, потому как у tabpanel layout = 'card' и указывать это, как я понимаю, вовсе не обязательно. А вот тут:
http://docs.sencha.com/extjs/5.1/5.1.../Ext.tab.Panel есть, возможно, ответы на Ваши вопросы и некие примеры... ;-) Да, и возможно, listeners надо поставить во viewConfig. |
| Часовой пояс GMT +3, время: 20:35. |