Sencha Touch 2 и плавающие, гибкие панели

У меня проблема с Sencha Touch 2 и прогибанием vbox. Вот мой код для панели (модифицированный для простоты, настоящая панель намного сложнее, но вот к чему она сводится):

Ext.define('risbergska2.view.Test', {
extend: 'Ext.Panel',
xtype: 'test',


config: {
    title: 'Test',
    iconCls: 'home',

    items: [
        {
            xtype: 'container',
            layout: 'vbox',
            items: [
                {
                    xtype: 'container',
                    flex: 2,
                    style: 'background-color: #f90;'
                },
                {
                    xtype: 'container',
                    flex: 1,
                    style: 'background-color: #9f0;'
                },
                {
                    xtype: 'container',
                    flex: 1,
                    style: 'background-color: #0f9;'
                },
                {
                    xtype: 'container',
                    flex: 2,
                    style: 'background-color: #90f;'
                }
            ]
        }
    ]
}

})

А вот мой Main.js:

Ext.define("risbergska2.view.Main", {
extend: 'Ext.tab.Panel',
requires: [
    'Ext.TitleBar',
    'Ext.Video'
],
config: {
    tabBarPosition: 'bottom',

    items: [
        {
            xtype: 'homeloggedinview'
        },
        {
            xtype: 'myview'
        },
        {
            xtype: 'programview'
        },
        {
            xtype: 'socialview'
        },
        {
            xtype: 'aboutview'
        },
        {
            xtype: 'test'
        }
    ]
}

});

Мой app.js:

Ext.application({
name: 'risbergska2',

requires: [
    'Ext.MessageBox'
],

views: ['Main', 'HomeLoggedIn', 'My', 'Program', 'Social', 'About', 'Test'],

launch: function() {
    // Destroy the #appLoadingIndicator element
    Ext.fly('appLoadingIndicator').destroy();

    // Initialize the main view
    Ext.Viewport.add(Ext.create('risbergska2.view.Main'));
},

onUpdated: function() {
    Ext.Msg.confirm(
        "Application Update",
        "This application has just successfully been updated to the latest version. Reload now?",
        function(buttonId) {
            if (buttonId === 'yes') {
                window.location.reload();
            }
        }
    );
}

});

Если я запускаю этот код и перехожу на тестовую панель, ничего не отображается. Я хочу, чтобы он показывал (в тестовом примере) четыре разных контейнера с четырьмя разными цветами, верхний и нижний в два раза больше среднего по вертикали.

Разве это не способ получить такой результат? Где я ошибся?

Спасибо!


person Daniel Engdahl    schedule 19.09.2012    source источник
comment
Я не понимаю, почему этот вопрос имеет какое-либо отношение к Flex.   -  person JeffryHouser    schedule 19.09.2012
comment
Проблема напрямую связана со свойством flex для панелей в Sencha Touch. Это не имеет ничего общего с Adobe Flex. Прошу прощения за ваше замешательство.   -  person Daniel Engdahl    schedule 19.09.2012


Ответы (1)


Установите макет: «подходит» для risbergska2.view.Test

Ext.define('risbergska2.view.Test', {
extend: 'Ext.Panel',
xtype: 'test',


config: {
    title: 'Test',
    iconCls: 'home',
    layout : 'fit',
    items: [
        {
            xtype: 'container',
            layout: 'vbox',
            items: [
person Nikolai Borisik    schedule 19.09.2012
comment
К сожалению, это не работает. Я пробовал это раньше, и хотя я думал, что это должно работать в соответствии с документацией Sencha, это не так. Возможно, что-то еще не так с моим кодом... Но я просто не вижу, где я что-то упустил. Это кажется настолько тривиальным, что меня это действительно раздражает! - person Daniel Engdahl; 19.09.2012
comment
Я тестирую ваш risbergska2.view.Test в качестве основного представления приложения, он отлично работает, если добавить в макет конфигурации: «подходит». Для теста вы можете поместить свой вид в окно просмотра. В app.js launch: function() { // Уничтожаем элемент #appLoadingIndicator Ext.fly('appLoadingIndicator').destroy(); Ext.Viewport.add({ xtype : 'тест' }); } Является ли вывод консоли пустым? - person Nikolai Borisik; 19.09.2012
comment
Я добавил тестовую панель в качестве последнего элемента в свою панель вкладок, и это должно быть то же самое. В целях тестирования я изменил панель запуска на панель тестирования, как вы предлагаете здесь, но она по-прежнему ничего не показывает. Я имею в виду, что панель загружается, но на ней ничего не отображается, просто серый фон, а нижняя панель TabPanel исчезла, так как она загружается в мой Main.js. - person Daniel Engdahl; 19.09.2012
comment
Код из app.js добавлен для пояснения. - person Daniel Engdahl; 19.09.2012
comment
Извините, пропустил один вопрос. Да, в консоли нет ошибок или предупреждений. Он совершенно пуст. - person Daniel Engdahl; 19.09.2012
comment
Я попытался создать новое приложение с вашим кодом, все работает нормально. Попробуйте удалить другие вкладки из risbergska2.view.Main и оставить только { xtype: 'test', layout : 'fit' } Это поможет вам локализовать ошибку - person Nikolai Borisik; 19.09.2012
comment
Ух ты, я действительно получил это, чтобы работать теперь! Когда я поместил layout: 'fit' в свой основной вид, а не в фактический тестовый xtype, это сработало. Я действительно не понимаю, почему это так, если я укажу layout: 'fit' в xtype, я должен получить те же результаты, верно? Во всяком случае, теперь это работает, так что большое спасибо за вашу помощь! - person Daniel Engdahl; 20.09.2012
comment
Когда вы определяете представление, вы должны указать макет в разделе конфигурации, при создании вы помещаете макет в параметры. - person Nikolai Borisik; 20.09.2012