ExtJS и miniShop2. Добавить таб в окно с заказом

Здравствуйте.

Есть затруднение в добавлении таба в minishop2-window-order-update. Делаю вот так:
Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function()
{
	msComponent.order_id = this.record.id || 0;
	msComponent.ms2tab_order = {
		autoHeight: true,
		autoWidth: true,
		bodyCssClass: "tab-panel-wrapper",
		border: true,
		hideMode: "offsets",
		order_id: msComponent.order_id,
		title: _('mscomponent_tab_title'),
		xtype: "mscomponent-order-grid",
	};
	this.on('beforerender', function()
	{
		this.fields.items.push(msComponent.ms2tab_order);
	});
});

Далее если вытащить this в консоль, то в this.fields.items моя таба будет, но она не появляется в окошке в бекенде. :(

Также, если вместо this.fields.items.push(msComponent.ms2tab_order) поставить this.add(msComponent.ms2tab_order), то мой grid добавится, но он появится внизу окошка в каждой табе, что совершенно не устраивает.
Павел Гвоздь
15 ноября 2015, 17:01
modx.pro
1 756
0
Поблагодарить автора Отправить деньги

Комментарии: 7

Павел Гвоздь
15 ноября 2015, 20:13
0
Если сделать вот так:
this.on('beforerender', function()
{
	this.fields.items.push(msComponent.ms2tab_order);
	this.load();
});

То в консоль вываливает ошибку:
Uncaught TypeError: Cannot read property 'getUpdater' of undefined
    Павел Гвоздь
    15 ноября 2015, 20:41
    1
    0
    Удалось решить, вытащив метод .push() из метода .on(). То бишь вот код, который добавляет табу:
    Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function()
    {
    	msComponent.order_id = this.record.id || 0;
    	msComponent.ms2tab_order = {
    		autoHeight: true,
    		autoWidth: true,
    		bodyCssClass: "tab-panel-wrapper",
    		border: true,
    		hideMode: "offsets",
    		order_id: msComponent.order_id,
    		title: _('mscomponent_tab_title'),
    		xtype: "mscomponent-order-grid",
    	};
    	
    	this.fields.items.push(msComponent.ms2tab_order);
    });

    Не знаю, насколько это правильно. Надеюсь знающие расскажут.
      Сергей Шлоков
      16 ноября 2015, 07:17
      +1
      А я ведь писал про это.
        Павел Гвоздь
        16 ноября 2015, 09:24
        0
        Так, а как воспользоваться методом MODx.addTab, если на табах этих нет ID? Прописав такой код мне ничего не добавило:
        MODx.addTab('minishop2-window-order-update',
        {
        	id: "mskupon-order-kupons-tab",
        	title: _('mskupon_tab_title'),
        	items: [{
        		xtype: "mskupon-order-kupons-grid"
        	}]
        })

        Насколько вообще плохо то решение, с помощью которого мне удалось решить это, подскажи, пожалуйста? И если не трудно, то как в данном случае воспользоваться методом .addTab?
          Сергей Шлоков
          16 ноября 2015, 10:30
          +1
          Так, а как воспользоваться методом MODx.addTab, если на табах этих нет ID?
          А если посмотреть внимательнее. А вот код страницы

          Таб добавляется не к гриду, а к панели. Т.е. код файла должен выглядеть так
          Ext.onReady(function(){
          	MODx.addTab('minishop2-orders-tabs',
          		{
          			id: "mskupon-order-kupons-tab",
          			title: _('mskupon_tab_title'),
          			items: [{
          				xtype: "mskupon-order-kupons-grid"
          			}]
          		})
          });
          Подключается в плагине
          <?php
          switch ($modx->event->name) {
              case 'OnManagerPageBeforeRender':
                 $modx->controller->addLastJavascript('путь до файла);
              break;
          }
          Насколько вообще плохо то решение, с помощью которого мне удалось решить это, подскажи, пожалуйста?
          Ничего плохого я не вижу. Можно также подключить через наследование (prototype). В программировании и в жизни решений всегда больше чем одно. Просто нужно выбирать то, которое проще.
            Павел Гвоздь
            16 ноября 2015, 10:38
            0
            Спасибо, Сергей, большое за помощь. Только я видимо не ясно описал то, что мне нужно. Твоё решение добавляет таб на основное окно со списком заказов. А мне надо в модальное окошко с подробностями заказа. Поэтому я и ссылаюсь на тот кусок кода в minishop2, говоря "если на табах этих нет ID". А твоё решение работает, только не решает моей задачи, к сожалению. Кстати событие плагина можно использовать вот такое "msOnManagerCustomCssJs". В minishop2 это дело уже предусмотрено.
              Сергей Шлоков
              16 ноября 2015, 10:43
              +1
              Извиняюсь, я недопонял.
              Кстати событие плагина можно использовать вот такое «msOnManagerCustomCssJs». В minishop2 это дело уже предусмотрено.
              Буду знать. Я с минишопом близко еще не знакомился.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7