7

私は本当に重要だと思う問題に固執しました。シンプルな Sencha Touch アプリには多くのビューがあります。私の Mainview は、下部にドッキング アイコンがある TabPanel です。アプリで、Tabpanel の外側にある別のビューに切り替えることがあります。DOM をビューで過負荷にしたくないので、もう必要ないので、非アクティブなときにビューを破棄するソリューションを探しています。コントローラーで別のビューに切り替えながら、これを試しました:

this.getMainview().destroy();

メインビューが削除されたようですが、エラーが発生します:

Uncaught TypeError: Cannot read property 'dom' of null

.destroy() - メソッドに何か問題があると思いますか、この問題を処理するためのより良い方法はありますか?

4

3 に答える 3

5

私はこれまで何度もこの問題に悩まされてきました。現在のところ、Sencha Touch 2 には効率的で実際にバグのない解決策はないようです。ビューが 2 回目に再度追加されると、その不快なエラーが再び表示されます。

考えられる解決策:

このコード スニペット:

your_container(your_container.getActiveItem(), false);

サブコンポーネントを実際にメモリからではなく DOM から破棄します。後で追加すると、エラーは発生しません(私がテストしたように)。

それが役に立てば幸い。

于 2012-05-12T10:08:39.743 に答える
0

私の状況とそれをどのように解決したかを公開します。

アイコン付きの TabPanel があります。これらのタブの 1 つに、アイテムのリストが表示されます。項目をクリックすると、その説明を示す新しいパネルが表示されます。[戻る] ボタンをクリックすると、そのパネルが破棄され、リストに戻ります。このようにして、現在使用されていない「説明」パネルを破棄します。

だから私がしたことは、クリックされたアイテムのインデックスに応じて説明パネルをインスタンス化する関数を作成することでした:

function project(i) {
    var v;
    switch(i) {
        case 0:
            v = Ext.create( 'Ext.Panel', {
                title: 'title',
                layout: { type: 'fit' },
                id: 'project0',
                iconCls: '',
                style: '',
                html: 'my html'
                });
            break;
    }
    return v;
}

さて、リストの「itemtap」イベントには次のものがあります。

var lastItem = container.add(project(i));
itemsList.hide(); //hide the List and display only the new Panel in the container

ここで、前のビュー (つまりリスト) に戻るためのボタンがヘッダーにあり、これはそのボタンの「タップ」イベントです。

container.remove(lastItem, true); //hide and destroy it
itemList.show(); //show the List again

したがって、リスト項目と説明項目 (パネル) の間を行き来しても、クリックするたびに新しいインスタンスを取得し、戻ったときに同様に破棄されるため、問題はありません。

それは私の問題を解決しました。

于 2012-12-07T17:22:59.737 に答える