我正在编写一个 Sencha Touch 应用程序,其中包含一个中等复杂的组合Ext.TabBar
with Ext.Panel
。
但是当我没有设置属性时,我的Ext.Panel
usingExt.layout.CardLayout
遇到了一个神秘的问题:当我尝试调用'方法时,fullscreen: true
它会抛出一个它在我的概念证明版本中没有打开的方法。TypeError: Object card has no method 'setActiveItem'
panel
.setActiveItem()
fullscreen: true
我可以在加载了 Sencha Touch 库的页面上复制 Chrome 控制台上的问题,如下所示:
> 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(1 月 3 日,~10.30UTC+1h),使用调试器四处走动并发现一些东西:
仅设置layout: 'card'
不会触发创建真实Ext.layout.CardLayout
对象的创建。由于.setActiveItem()
试图委托给竞争者的.layout
财产,它几乎会立即失败。但是,设置.layout
为新的Ext.layout.CardLayout
会导致更多问题。
更新 2:(1 月 3 日,~12:25UTC+1h)这一切都归结为各种组件对象没有被渲染/插入到依赖项中以准备好渲染。我设法通过添加侦听器使我的代码正常工作,首先是added
封闭面板中执行 a 的事件的侦听器this.setLayout(new Ext.layout.CardLayout());
,然后是afterrender
正在添加的组件上的侦听器,最终调用.setActiveItem()
以切换到所需的卡。