2012-09-08 7 views
6

私は動的に次のように自分のアプリケーションのコントローラを作成します。コントローラExtJSを削除するには?

var loadedController = me.app.getController(controller_name); 
      loadedController.init(); 

は、どのように私は使用した後、このコントローラを削除することができますか?おかげさまで

答えて

12

ExtJsは現在、箱から取り外したコントローラの取り外しをサポートしていません。

  • は、このコントローラはEventBusに登録されたすべてのイベントリスナーの登録を解除する方法uncontrolExt.app.EventBusを拡張:コントローラのクリーンアップには、次の操作を行います。実装を導くために、Ext.app.EventBus#controlのソースを調べてください。または、this oneを使用してください。
  • をコレクションから所定のコントローラインスタンスを削除する方法removeControllerで拡張します。 Ext.util.MixedCollectionで、Ext.app.Application#getControllerのソースをチェックしてください。その後、uncontrolを使用して、そのコントローラーのすべての登録済みリスナーをクリーンアップします。
  • 特定のコントローラでdestroyメソッドを実装するか、またはExt.app.Controllerを拡張します。少なくともclearManagedListeners()を呼び出す必要があり、アプリケーション・アーキテクチャーとコントローラーのライフ・サイクルに合ったものであれば、このコントローラーによって作成されたビューやストアなどの他のオブジェクトを破壊する必要があります。
+0

丁寧に質問しました。 –

+0

良い答え!それは機能の要求に配置する必要があります。 – sra

+0

良い答えは、あなたが削除しなければならないすべてをカバー:)コントローラが本当に削除されている場合はどうすればテストですか? – bhovhannes

0

obj.destroy()で任意のExtクラスを破棄できます。 ガベージコレクションできるように、オブジェクトへのすべての参照も削除することを忘れないでください。

2

プレミアムメンバーのリクエストがSenchaフォーラムで開始されました。残念なことに、元の要求は8月以降、単語なしでそこにありました。私はちょうどこのスレッドを参照してその要求にぶつかりました。

The Sencha Forum Topic (Premium section)

getController()
0

方法は、新しいコントローラオブジェクトを作成し、格納しcontrollers配列内への参照します。

つまり、getController()を使用してコントローラをロードした場合、アプリケーションオブジェクトのcontrollersプロパティに格納されている参照が少なくとも1つ存在するため、コントローラは削除されません。

は、既存のオブジェクトへの参照(DOM要素、内線コンポーネント、そのビューなど)を失うことになるとすぐに(それが占有するメモリを解放)が破壊されるように、コントローラをロードするには1は Ext.createを代わりに使用する必要があります getController()です。ここ
はコードです:

var loadedController = Ext.create(
    me.app.getModuleClassName(controller_name, 'controller'), 
    { 
     application: me.app, 
     id: Ext.id(null, 'controller') 
    } 
); 
loadedController.init(me.app); 
loadedController.onLaunch(me.app); 

loadedControllerはローカル変数になり、範囲から出ます。新しく作成されたコントローラーを「実生活」にバインドし続ける唯一のことは、コントローラーが作成する要素になります。
たとえば、コントローラーはDOMに注入されるonLaunch()メソッドで新しいビューを作成し、コントローラーはinit()メソッドでハンドラーバインドを使用してビューイベントをリッスンします。ビューが存在する限り、コントローラも存在します。しかし、ユーザーがビューを閉じると、ビューが破棄され、コントローラーへの最後の参照であったため、コントローラーも破棄されます。コントローラで作成

UPDATE
リスナーはExt.app.EventBusに付加されており、それらはまた、そのコントローラへの参照を保持することができるので、コントローラの自動削除を防止することができます。