04.06.2015, 15:06
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Как же работает fireViewEvent() в ViewController
Всем привет.
Пытаюсь создавать события с помощью fireViewEvent(), но ничто их не слышит.
Есть своя таблица, наследованная от класса Ext.grid.Panel. Там по двойному клику, запускается событие this.fireViewEvent('vieworder').
Эта моя таблица вставлена в закладку таб-панели, закладки создаются динамически. Объявил слушателя в табпанели, но он ничего не слышит.
{
xtype: 'tabpanel',
region: 'center',
layout: 'fit',
reference: 'centerPanel',
listeners: {
vieworder: 'onCreateTab'
}
}
Как сделать, чтобы таб-панель услышала сообщение из вложенной таблицы в одну из её закладок?
Как я понял fireViewEvent() слышит ViewController, находящийся выше в иерархии. У меня их всего два, один для таблицы, а второй самый главный, в View которого объявлена таб-панель.
Как понять где теряется созданное событие, ну или может быть там какие-то скрытие ViewController, созданные системой и находящиеся между моими двумя?
|
|
04.06.2015, 15:54
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Попробовал не динамически создавать закладки, а явно и всё заработало.
{
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);
},
Я попробовал добавить слушателя для каждой так созданной закладки, но эффект получается совершенно другой. (Я закомментировал тот участок как я это пытался делать). В этом случае событие перехватывает не закладка, а таблица внутри закладки.
|
|
05.06.2015, 15:51
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
по мойму нужен очень краткий пример создания динамических вкладок в песочнице...
|
|
05.06.2015, 15:53
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
вы тоже также выкрутились? -> cfg.closable = true;
а где об этом прочитали? мне пришлось это просто наобум применить...
|
|
05.06.2015, 18:03
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Сообщение от khusamov
|
по мойму нужен очень краткий пример создания динамических вкладок в песочнице...
|
Хотел сделать, но с самой песочницей разбираться не меньше чем с самой ExtJS приходится. То же думаю, что без примера возможно сложно понять мою проблему.
|
|
05.06.2015, 18:11
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Сообщение от khusamov
|
вы тоже также выкрутились? -> cfg.closable = true;
а где об этом прочитали? мне пришлось это просто наобум применить...
|
Я взял из примера что с ExtJS идет ticket-app Там в файле Ticket.view.main.MainController.js как раз код, который я для себя скопипастил и отрывок которого привел в сообщении, от туда и это фишка с выводом крестика для закрытия закладки.
Жаль только там вариант, когда они одну закладку заранее создали и уже из неё создают динамически другие при двойном клике по строке таблицы с билетами. По сути то что я как раз делаю, только у меня не должно быть уже готовых закладок при старте приложения как у них.
|
|
05.06.2015, 18:12
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
в соседней ветке аналогичные траблы...
сделайте в песочнице - это в будущем для вас окупится!!!
я с вашим примером позже смогу заняться, пока в соседней ветке работаю... потому некогда.
|
|
05.06.2015, 18:13
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Цитата:
|
Жаль только там вариант, когда они одну закладку заранее создали и уже из неё создают динамически другие при двойном клике по строке таблицы с билетами. По сути то что я как раз делаю, только у меня не должно быть уже готовых закладок при старте приложения как у них.
|
Вы можете сделать закладку заранее и СКРЫТЬ ЕЕ (каким либо способом) - а потом уже ее клонировать. Возможно прокатит вариант.
|
|
05.06.2015, 18:19
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Сообщение от khusamov
|
Вы можете сделать закладку заранее и СКРЫТЬ ЕЕ (каким либо способом) - а потом уже ее клонировать. Возможно прокатит вариант.
|
Думал над таким вариантом, только у меня больше половины всех закладок придется заранее создавать, так как таблица из которой будут создаваться новые закладки будут присутствовать в большинстве закладок.
Надо всё же убить день или два и создать пример.
|
|
05.06.2015, 22:54
|
Аспирант
|
|
Регистрация: 20.04.2015
Сообщений: 39
|
|
Как я понял TabPanel должна иметь изначально хотя бы одну закладку. Еще обратил внимание, что у Вас в центральном регионе стоит tabpanel, у которой layout: 'fit'... Вероятно эта строка конфига просто игнорируется при рендеринге, потому как у tabpanel layout = 'card' и указывать это, как я понимаю, вовсе не обязательно. А вот тут:
http://docs.sencha.com/extjs/5.1/5.1.../Ext.tab.Panel
есть, возможно, ответы на Ваши вопросы и некие примеры... ;-)
Да, и возможно, listeners надо поставить во viewConfig.
Последний раз редактировалось AirGraph, 05.06.2015 в 23:13.
|
|
|
|