Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2015, 10:11
Интересующийся
Отправить личное сообщение для sin_raben Посмотреть профиль Найти все сообщения от sin_raben
 
Регистрация: 30.01.2015
Сообщений: 11

Автовысота элементов
возникла неясность с ExtJS 5.
Хочу создать страницу с несколькими вкладками и чтобы содержимое каждой вкладки заполняло все пространство страницы, если же данные не помещаются, то появлялся скролл, при явном указании высоты - все хорошо, но хотелось бы иметь гибкий механизм, скорее всего я неправильно использую xtype и layout. Научите: как это побеждать?
вот, собственно, мой код:
Ext.QuickTips.init();
Ext.application({
    name: 'MVVM',

    views: [
        'CarGrgid',
        'RouteHeadGrid',
        'CarForm',
    ],

    controllers: [
        'CarController',
        'RouteHeadController'
    ],

    stores: [
        'CarStore',
        'DriversStore',
        'RouteHeadStore',

    ],

    launch: function() {
        Ext.tip.QuickTipManager.init();
        Ext.create('Ext.panel.Panel', {
            //Ext.create('Ext.container.Viewport', {
            renderTo: Ext.getBody(), //document.body,
            items: [{
                xtype: 'tabpanel',
                layout: 'fit',
                items: [{

                    title: 'Список автомобилей',
                    layout: {
                        type: 'hbox',
                        align: 'stretch'
                    },
                    items: [{
                        height: 600,
                        xtype: 'panel',
                        layout: 'fit',
                        autoScroll: true,
                        //scroll: true,
                        flex: 1,
                        items: [{
                            xtype: 'mvvm-CarGrgidView',
                        }]
                    }, {
                        xtype: 'mvvm-CarFormView',
                        flex: 1
                    }]

                }, {
                    title: 'Готовы к рейсу',
                    layout: 'fit',
                    items: [{
                        extend: 'Ext.panel.Panel',
                        requires: [
                            'Ext.layout.container.Table'
                        ],

                        layout: {
                            type: 'table',
                            columns: 1,
                            tableAttrs: {
                                style: {
                                    width: 600
                                }
                            },
                        },

                        items: [{
                            xtype: 'mvvm-RouteHeadFormView',

                        }, {
                            xtype: 'mvvm-RouteHeadGridView',
                        }]
                    }]
                }, {
                    title: 'Список автомобилей',
                    //xtype: 'tabbar',
                    xtype: 'panel',
                    layout: 'fit',
                    height: 600,
                    //anchor: "100% 100%",
                    flex: 1,
                    items: [{

                        flex: 1,
                        //anchor:'100%',
                        title: 'Border Layout',
                        layout: 'border',
                        items: [{
                            title: 'South Region is resizable',
                            region: 'south', // position for region
                            xtype: 'panel',
                            //height: 100,
                            split: true, // enable resizing
                            flex: 1,
                            margin: '0 5 5 5',
                            layout: 'fit'
                        }, {
                            title: 'West Region is collapsible',
                            region: 'west',
                            xtype: 'panel',
                            margin: '5 0 0 5',
                            //width: 200,
                            flex: 1,
                            collapsible: true,
                            id: 'west-region-container',
                            layout: 'fit'
                        }, {
                            title: 'Center Region',
                            flex: 2,
                            region: 'center', // center region is required, no width/height specified
                            xtype: 'panel',
                            layout: 'fit',
                            margin: '5 5 5 5'
                        }, {
                            title: 'Center Region',
                            collapsible: true,
                            flex: 2,
                            region: 'east', // center region is required, no width/height specified
                            xtype: 'panel',
                            layout: 'fit',
                        }],
                    }]
                }]
            }]

        });

    }
});

Последний раз редактировалось sin_raben, 30.01.2015 в 10:18.
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2015, 13:45
Интересующийся
Отправить личное сообщение для sin_raben Посмотреть профиль Найти все сообщения от sin_raben
 
Регистрация: 30.01.2015
Сообщений: 11

Неужели у всех все прекрасно тянется, и я один такой горемыка?
Ответить с цитированием
  #3 (permalink)  
Старый 03.02.2015, 13:47
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Да, есть замечания к использованию xtype и layout.

Представьте, что у вас есть блоки, которые несут содержание и блоки, которые нужны для распределения содержания. Последние называются контейнерами. Нарисуйте своё приложение сначала из одних контейнеров. Для этого используйте xtype: viewport, panel, tabpanel, container. Вместо блоков с содержанием, ставьте обычные панели, потом замените их на гриды, графики и прочее.

У каждого контейнера есть свойства layout и items. Если в материнском контейнере вы выбрали layout: hbox, то в дочерних контейнерах независимо от их собственного типа вы можете указать свойства flex, minWidth и прочие. Если вы выберите в материнском контейнере другой тип layout, то в дочерних контейнерах нужно указывать соответствующие ему настройки. Вот как свойство дочернего контейнера flex объяснено в документации материнского контейнера hbox: http://docs.sencha.com/extjs/5.1/5.1....HBox-cfg-flex

Ваш случай в упрощённом виде

Ext.application({
    name: 'MVVM',

    launch: function() {
        
        Ext.create('Ext.container.Viewport', {
            renderTo: Ext.getBody(),
            layout: 'fit',
            items: [{
                xtype: 'tabpanel',
                layout: 'fit',
                items: [{
                    title: 'Список автомобилей',
                    xtype: 'panel',
                    autoScroll: true,
                    html: 'tttt<br>tttt<br>'
                }, {
                    title: 'Готовы к рейсу',
                    xtype: 'panel'
                }, {
                    title: 'Список автомобилей',
                    xtype: 'panel'
                }]
            }]

        });

    }
});
Ответить с цитированием
  #4 (permalink)  
Старый 03.02.2015, 16:46
Интересующийся
Отправить личное сообщение для sin_raben Посмотреть профиль Найти все сообщения от sin_raben
 
Регистрация: 30.01.2015
Сообщений: 11

Спасибо за разъяснение. Постараюсь более осознанно применять свойства. А не подскажете, как определить какие свойства являются обязательными для того или иного элемента?

В частности если закомментировать указание высоты в контейнере bordera, то в консоли выскакивает такая ошибка:
"Border layout does not currently support shrinkWrap height. Please specify a height on component: panel-1061, or use a container layout that sets the component's height. "

Как следует поступать в подобной ситуации? Указывать высоту фиксированной, как я и сделал или есть более элегантные способы сделать высоту подогнанную под высоту экрана?
Ответить с цитированием
  #5 (permalink)  
Старый 03.02.2015, 18:42
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Это всё из-за того, что Вы, скорее всего, не используете viewport. В body нужно вставлять его. Изменил пример:
https://fiddle.sencha.com/#fiddle/hio

Ext.application({
    name: 'MVVM',

    launch: function() {
        
        Ext.widget({
            xtype: 'viewport',
            renderTo: Ext.getBody(),
            layout: 'fit',
            items: [{
                xtype: 'tabpanel',
                activeTab: 2,
                layout: 'fit',
                items: [{
                    xtype: 'panel',
                    title: 'Список автомобилей',
                    autoScroll: true,
                    html: 'tttt<br>tttt<br>'
                }, {
                    xtype: 'panel',
                    title: 'Готовы к рейсу'
                }, {
                    xtype: 'panel',
                    title: 'Список автомобилей',
                    layout: 'border',
                    items: [{
                        xtype: 'panel',
                        title: 'South Region is resizable',
                        region: 'south', // position for region
                        split: true, // enable resizing
                        flex: 1,
                        margin: '0 5 5 5'
                    }, {
                        xtype: 'panel',
                        title: 'West Region is collapsible',
                        region: 'west',
                        margin: '5 0 0 5',
                        flex: 1,
                        collapsible: true
                    }, {
                        xtype: 'panel',
                        title: 'Center Region',
                        flex: 2,
                        region: 'center',
                        margin: '5 5 5 5'
                    }, {
                        xtype: 'panel',
                        title: 'Center Region',
                        collapsible: true,
                        flex: 2,
                        region: 'east'
                    }]
                }]
            }]

        });

    }
});
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2015, 15:00
Интересующийся
Отправить личное сообщение для sin_raben Посмотреть профиль Найти все сообщения от sin_raben
 
Регистрация: 30.01.2015
Сообщений: 11

Спасибо Вам огромное, оказалось что я неправильно обернул элементы, из-за чего поплыла вся верстка, впредь буду узлы у которых большая вложенность реализовывать через отдельные объекты.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод случайных элементов из массива в таблицу Narm0 Общие вопросы Javascript 10 06.08.2013 12:39
Удалить и вернуть массив из удаленных элементов splice Paulyyy Общие вопросы Javascript 15 29.05.2013 15:36
запретить изменение количество элементов в списке Antistas jQuery 0 05.12.2012 14:05
Получить список ВСЕХ элементов DOM Почемучкин Events/DOM/Window 7 16.04.2012 11:33
Сгенерировать 2 последовательности и узнать сколько в них одинаковых элементов Ирина Владимировна Общие вопросы Javascript 10 24.03.2012 18:18