Sencha Architect 2 で Sencha Touch (2.2) を使用する
ナビゲートするツリー構造があります。
ノードは要素であり、要素はフォルダーまたはリーフのいずれかです。
Ext.dataview.dataview (LIST) に要素を表示するには、ストア (storeID: 'elementstore') と Ext.dataview.component.Dataitem を使用します。
これは、最初に LIST を埋めるための私のコードであり、フォルダーを開くたびにツリーの奥に移動します。
初めてストアをいっぱいにして、イベントを無効にして update() が 2 回呼び出されないようにします。作成後すぐにこのビューに切り替えます。それはうまく機能し、望ましい結果を返します。私のリストには、フォルダとリーフの最初のレベルが表示されています。
これは、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 コントローラーにあるコードです。
実際には 1 レベル戻るのではなく、最上位レベルに戻ります。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() は正確に何をしているのですか???