Я программирую приложение Sencha Touch с умеренно сложной композицией Ext.TabBar
с Ext.Panel
внутри него.
Но мой Ext.Panel
с использованием Ext.layout.CardLayout
наталкивается на загадочную проблемукогда для него не установлено свойство fullscreen: true
: оно выдает TypeError: Object card has no method 'setActiveItem'
, когда я пытаюсь вызвать .setActiveItem()
метод panel
, чего не было в моей версии для проверки концепции, у которой была fullscreen: true
Я могу воспроизвести проблему на консоли Chrome на странице с загруженной библиотекой Sencha Touch следующим образом:
> var p1 = new Ext.Panel({layout:'card', items:[{html:'a'},{html:'b'}]})
undefined
> p1.setActiveItem(0)
TypeError: Object card has no method 'setActiveItem'
И это не происходит со свойством .fullscreen
:
> var p2 = new Ext.Panel({fullscreen: true,
layout:'card',
items:[{html:'a'},{html:'b'}]})
undefined
> p2.setActiveItem(0)
subclass
Что дает?
Информация о версии: Я использую Sencha Touch 1.0.1a
Обновление 1 (3 января, ~ 10.30UTC + 1 час), обходя с отладчиком и обнаруживая вещи:
Простая установка layout: 'card'
не приведет к созданию фактического Ext.layout.CardLayout
объекта, создаваемого по-настоящему.Поскольку .setActiveItem()
пытается делегировать свойству .layout
компонента, оно почти мгновенно завершится неудачей.Однако установка .layout
на новый Ext.layout.CardLayout
вызывает больше проблем в будущем.
Обновление 2 : (3 января, ~ 12: 25UTC + 1h) Все сводится к нулюк различным компонентным объектам, которые не были визуализированы / вставлены в зависимость в достаточной степени, чтобы быть готовыми к визуализации.Мне удалось заставить мой код работать, добавив прослушиватели, сначала прослушиватель для события added
на включающей панели, который выполняет this.setLayout(new Ext.layout.CardLayout());
, затем прослушиватель afterrender
для добавляемого компонента, который, наконец, вызывает .setActiveItem()
для переключенияна нужную карту.