Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   grid in grid in window (https://javascript.ru/forum/extjs/39435-grid-grid-window.html)

kolikolikoli 30.06.2013 09:47

grid in grid in window
 
Здравствуйте. Пишу MVC приложение.

Есть два класса grid:

Grid1 с кнопкой "добавить телефоны":
Ext.define('AM.view.Grid1' ,{
    extend: 'Ext.grid.Panel',
    alias: 'widget.employeeList',
    title: 'Сотруднички',
    store: 'Employees',
    columns: [
        {header: 'Имя',
           dataIndex: 'name',
           flex: 1}
],
    bbar: [
        {text: 'Добавить телефоны',
        action: 'add'}
         ]
})


Grid2:
Ext.define('AM.view.Grid2' ,{
    extend: 'Ext.grid.Panel',
    alias: 'widget.phoneList',
    title: 'Телефоны',
     store: 'Phones',
    columns: [
        {header: 'Телефон',
            dataIndex: 'phones',
            flex: 1}
    ]
})


Grid1 отображается с запуска приложения.
app.js:
Ext.application({
    name: 'AM',

    appFolder: 'app',

    controllers: [
        'Employees'
    ],

    launch: function() {
        Ext.create('Ext.container.Viewport', {
            layout: 'fit',
            items: {
                xtype: 'employeeList'
            }
        });
    }
});


По нажатию на кнопку в grid1 "добавить телефоны" , вызывается окно с grid2:
Ext.define('AM.view.EmployeeWindowAdd', {
    extend: 'Ext.window.Window',
    alias : 'widget.employeeAdd',
    title : 'Добавить телефоны',
    layout: 'column',

    items: [{
        xtype: 'phoneList',
    }],


:help: Вот тут и проблема. Окно (EmployeeWindowAdd) делается продолжением панели grid1, т.е к панели gri1 прикрепляется еше панелька окна(EmployeeWindowAdd). Если например убрать
items: [{
        xtype: 'phoneList',
    }],
, то окно будет открывается как надо, т.е поверх grid1. .:help:

Я думаю это из-за того что мы делаем и в грид1 и в грид2 extend: 'Ext.grid.Panel', т.е расширяем одну и ту же стандартную панель? Если да, то подскажите пожалуйста как сделать правильно.

Вот контроллер:
Ext.define('AM.controller.Employees', {
    extend: 'Ext.app.Controller',

     views: [
         'Grid1',
         'Grid2',
         'EmployeeWindowAdd',
     ],
    stores: ['Employees', 'Phones'],
    models: ['Employee', 'Phone'],


    init: function(){
        this.control({
            'employeeList button[action=add]': {
                click: this.editPersonAddClick
            }


        })
    },

    editPersonAddClick : function(){
      var view = Ext.widget('employeeAdd');
    },       
})

FireVolkhov 02.07.2013 15:02

kolikolikoli попробуй так
Ext.define( 'AM.view.EmployeeWindowAdd', {
            extend: 'Ext.window.Window',
            alias : 'widget.employeeAdd',
            title : 'Добавить телефоны',

            //----------
            height: 200,
            width: 400,
            layout: 'fit',
            //----------

            items: {  
                xtype: 'phoneList'
            }
        });

Вот ссылка на живой пример


Часовой пояс GMT +3, время: 10:13.