私は動的に次のように自分のアプリケーションのコントローラを作成します。コントローラExtJSを削除するには?
var loadedController = me.app.getController(controller_name);
loadedController.init();
は、どのように私は使用した後、このコントローラを削除することができますか?おかげさまで
私は動的に次のように自分のアプリケーションのコントローラを作成します。コントローラExtJSを削除するには?
var loadedController = me.app.getController(controller_name);
loadedController.init();
は、どのように私は使用した後、このコントローラを削除することができますか?おかげさまで
ExtJsは現在、箱から取り外したコントローラの取り外しをサポートしていません。
uncontrol
でExt.app.EventBus
を拡張:コントローラのクリーンアップには、次の操作を行います。実装を導くために、Ext.app.EventBus#control
のソースを調べてください。または、this oneを使用してください。removeController
で拡張します。 Ext.util.MixedCollectionで、Ext.app.Application#getController
のソースをチェックしてください。その後、uncontrol
を使用して、そのコントローラーのすべての登録済みリスナーをクリーンアップします。destroy
メソッドを実装するか、またはExt.app.Controller
を拡張します。少なくともclearManagedListeners()
を呼び出す必要があり、アプリケーション・アーキテクチャーとコントローラーのライフ・サイクルに合ったものであれば、このコントローラーによって作成されたビューやストアなどの他のオブジェクトを破壊する必要があります。obj.destroy()
で任意のExtクラスを破棄できます。 ガベージコレクションできるように、オブジェクトへのすべての参照も削除することを忘れないでください。
プレミアムメンバーのリクエストがSenchaフォーラムで開始されました。残念なことに、元の要求は8月以降、単語なしでそこにありました。私はちょうどこのスレッドを参照してその要求にぶつかりました。
The Sencha Forum Topic (Premium section)
getController()方法は、新しいコントローラオブジェクトを作成し、格納しcontrollers
配列内への参照します。
つまり、getController()を使用してコントローラをロードした場合、アプリケーションオブジェクトのcontrollers
プロパティに格納されている参照が少なくとも1つ存在するため、コントローラは削除されません。
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に付加されており、それらはまた、そのコントローラへの参照を保持することができるので、コントローラの自動削除を防止することができます。
丁寧に質問しました。 –
良い答え!それは機能の要求に配置する必要があります。 – sra
良い答えは、あなたが削除しなければならないすべてをカバー:)コントローラが本当に削除されている場合はどうすればテストですか? – bhovhannes