1

使用 Sencha Touch (2.2) 和 Sencha Architect 2

我有一个导航树结构。

节点是元素,元素可以是文件夹或叶子。

为了在我的 Ext.dataview.dataview (LIST) 上显示元素,我使用了 store (storeID: 'elementstore') 和 Ext.dataview.component.Dataitem。

这是我最初填充 LIST 的代码,每次打开文件夹以深入树中时。

第一次填充商店,禁用事件,因此不会调用两次 update() 我将在创建后立即切换到此视图。它运作良好并返回所需的结果。我在我的列表中显示了第一级文件夹和叶子。

这是通过 onItemTap 事件直接在列表中触发的

var EStore = Ext.getStore('elementstore');
EStore.removeAll();
EStore.suspendEvents();
EStore.add(record.get('arrElement'));
EStore.resumeEvents(true); 

清空并用达到的树水平重新填充商店。

这是通过 onItemTap 事件直接在 LIST 中触发的

if(record.get('strUIType') === 'folder')
    {
        INDEX_STACK.push(index);
        store = Ext.getStore('elementstore');
        store.removeAll();
        store.add(record.get('arrElement'));
    }

问题是当我试图向后退,爬上我的树。这是位于 Sencha 控制器中的代码。

它实际上并没有回到一个级别,而是回到了顶层。ACTIVE_PROJECT 是
活动树的索引,它们都位于我的项目存储中。

var popped =INDEX_STACK.pop();
var tab = tabpanel.getParent().getParent().getParent().getComponent('projects_Tab');

if(popped === undefined)
{
    tab.setActiveItem(0);
}
else
{
    var eStore = Ext.getStore('elementstore');
    eStore.removeAll();

    //Crashes!
    eStore.add(Ext.getStore('projectstore').getAt(ACTIVE_PROJECT).get('arrElement'));
}

您是否看到 eStore.add(....) 是我收到以下错误的崩溃行:

Uncaught TypeError: Cannot call method 'indexOf' of null sencha-touch-all.js:21
Ext.Array.contains.e 
Ext.Array.include 
Ext.define.join 
Ext.define.insert 
Ext.define.add 
Ext.define.onMain_TabsTap  (----Yep this line is my code the rest is sencha touch...
Ext.define.doFire

我在这个控制器中添加到商店的唯一方法是一个空的 Ext.create(CarboZero.model.Element)。我无法从我的活动项目中得到任何东西。

删除和阅读有什么问题吗?我的商店是否因我的使用方式而损坏?我已经为此工作了大约 2 天,但没有让任何东西正常工作......

编辑问题

我刚刚在我的 Element 存储中将 destroyRemovedRecords 设置为 FALSE。

一切正常,但我不明白为什么它纠正了我的特定结构的问题...... remove() 到底在做什么???

4

2 回答 2

5

将 Element store 的属性设置为以下

destroyRemovedRecords : false

解决问题,仍然无法解释原因。

于 2013-06-19T18:27:17.767 回答
0

我遇到过同样的问题。就我而言,缓存已满。在叶子模型上,您可以设置useCache: false以防止数据被缓存。这解决了我的问题。

于 2014-11-14T11:17:57.693 回答