调试一些Sencha Touch 2代码,我已经把它归结为这个。为什么不起作用?更重要的是,为什么不应该呢?很明显,view、listOne和listTwo都在范围内,但点击listOne项目,然后返回,然后再次点击listOne项会导致错误。导航视图返回时是否删除引用?
var view = Ext.create('Ext.NavigationView', {
xtype:'myview',
fullscreen: true
});
var listTwo = Ext.create('Ext.List', {
store: {
fields: ['name'],
data: [
{name: 'Doeth'},
{name: 'Smith'},
{name: 'Johnson'},
{name: 'Stevens'}
]
},
itemTpl: '{name}'
});
var listOne = Ext.create('Ext.List', {
store: {
fields: ['name'],
data: [
{name: 'Cowper'},
{name: 'Everett'},
{name: 'University'},
{name: 'Forest'}
]
},
itemTpl: '{name}',
listeners: {
itemtap: function (me, index, target, record, e, eOpts ){
view.push(listTwo);
}
}
});
Ext.Viewport.add(view);
view.push(listOne);
查看了Sencha的源代码,我确认这是预期的行为:Ext.NavigationView
,在按下返回按钮时调用其pop()
方法。这反过来又调用NavigationView上的remove()
,并将活动视图作为参数。remove()
继承自Ext.Container
,并且可以选择性地销毁对象。默认情况下,autoDestroy
配置为true,这说明了发生了什么。
在导航视图中将autoDestroy
设置为false以修复错误。
Sencha小提琴
导航视图
集装箱