Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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, созданные системой и находящиеся между моими двумя?
Ответить с цитированием
  #2 (permalink)  
Старый 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);
    },


Я попробовал добавить слушателя для каждой так созданной закладки, но эффект получается совершенно другой. (Я закомментировал тот участок как я это пытался делать). В этом случае событие перехватывает не закладка, а таблица внутри закладки.
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2015, 15:51
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

по мойму нужен очень краткий пример создания динамических вкладок в песочнице...
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2015, 15:53
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

вы тоже также выкрутились? -> cfg.closable = true;
а где об этом прочитали? мне пришлось это просто наобум применить...
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2015, 18:03
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Сообщение от khusamov Посмотреть сообщение
по мойму нужен очень краткий пример создания динамических вкладок в песочнице...
Хотел сделать, но с самой песочницей разбираться не меньше чем с самой ExtJS приходится. То же думаю, что без примера возможно сложно понять мою проблему.
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2015, 18:11
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Сообщение от khusamov Посмотреть сообщение
вы тоже также выкрутились? -> cfg.closable = true;
а где об этом прочитали? мне пришлось это просто наобум применить...
Я взял из примера что с ExtJS идет ticket-app Там в файле Ticket.view.main.MainController.js как раз код, который я для себя скопипастил и отрывок которого привел в сообщении, от туда и это фишка с выводом крестика для закрытия закладки.

Жаль только там вариант, когда они одну закладку заранее создали и уже из неё создают динамически другие при двойном клике по строке таблицы с билетами. По сути то что я как раз делаю, только у меня не должно быть уже готовых закладок при старте приложения как у них.
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2015, 18:12
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

в соседней ветке аналогичные траблы...
сделайте в песочнице - это в будущем для вас окупится!!!
я с вашим примером позже смогу заняться, пока в соседней ветке работаю... потому некогда.
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2015, 18:13
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Цитата:
Жаль только там вариант, когда они одну закладку заранее создали и уже из неё создают динамически другие при двойном клике по строке таблицы с билетами. По сути то что я как раз делаю, только у меня не должно быть уже готовых закладок при старте приложения как у них.
Вы можете сделать закладку заранее и СКРЫТЬ ЕЕ (каким либо способом) - а потом уже ее клонировать. Возможно прокатит вариант.
Ответить с цитированием
  #9 (permalink)  
Старый 05.06.2015, 18:19
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Сообщение от khusamov Посмотреть сообщение
Вы можете сделать закладку заранее и СКРЫТЬ ЕЕ (каким либо способом) - а потом уже ее клонировать. Возможно прокатит вариант.
Думал над таким вариантом, только у меня больше половины всех закладок придется заранее создавать, так как таблица из которой будут создаваться новые закладки будут присутствовать в большинстве закладок.

Надо всё же убить день или два и создать пример.
Ответить с цитированием
  #10 (permalink)  
Старый 05.06.2015, 22:54
Аспирант
Отправить личное сообщение для AirGraph Посмотреть профиль Найти все сообщения от AirGraph
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
опишите, как работает функция Egor1324 AJAX и COMET 5 18.02.2015 08:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Объясните как работает... Alexej Общие вопросы Javascript 12 14.03.2013 01:19
При активации Disqus, не работает Nivo slider, как решить проблему? pinkfloyd Общие вопросы Javascript 0 30.05.2011 15:29
InnerHTML почему-то работает не так, как хотелось бы. помогите Dima00782 Общие вопросы Javascript 2 13.06.2010 21:17