次のように、アプリケーションでコントローラーを動的に作成します。
var loadedController = me.app.getController(controller_name);
loadedController.init();
使用後にこのコントローラーを削除するにはどうすればよいですか? ありがとう。
次のように、アプリケーションでコントローラーを動的に作成します。
var loadedController = me.app.getController(controller_name);
loadedController.init();
使用後にこのコントローラーを削除するにはどうすればよいですか? ありがとう。
ExtJs は現在、そのままではコントローラーの削除をサポートしていません。コントローラーをクリーンアップするには、次の手順を実行します。
Ext.app.EventBus
するメソッドで拡張します。uncontrol
のソースをチェックアウトしてExt.app.EventBus#control
、実装を派生させます。または、これを使用します。Ext.app.Application
メソッドで拡張します。Ext.util.MixedCollection です。ソースを確認してください。次に、 を使用して、そのコントローラーに登録されているすべてのリスナーをクリーンアップします。removeController
controllers
Ext.app.Application#getController
uncontrol
destroy
特定のコントローラーおよび/または extends のいずれかにメソッドを実装しますExt.app.Controller
。clearManagedListeners()
アプリケーションのアーキテクチャとコントローラーのライフサイクルに適合する場合は、ビューやストアなど、このコントローラーによって作成された他のオブジェクトを少なくとも呼び出し、場合によっては破棄する必要があります。Sencha フォーラムでプレミアム メンバーのリクエストが開始されました。残念ながら、元のリクエストは 8 月からあり、何の連絡もありません。このスレッドを参照して、そのリクエストをぶつけました。
getController()メソッドは、新しいコントローラー オブジェクトを作成し、それへの参照をcontrollers
配列に格納します。
つまり、コントローラーがgetController()controllers
を使用してロードされた場合、Application オブジェクトのプロパティに格納されたコントローラーへの参照が常に少なくとも 1 つ存在するため、コントローラーは削除されません。
既存のオブジェクト (DOM 要素、Ext コンポーネント、そのビューなど) への参照が失われるとすぐにコントローラーが破棄される (占有しているメモリーを解放する) ようにコントローラーをロードするには、getController の代わりに Ext.create を使用する必要があります。 () .
コードは次のとおりです。
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
ローカル変数になり、スコープから出ます。新しく作成されたコントローラーを「実生活」にバインドし続ける唯一のものは、コントローラー自体が作成する要素です。
たとえば、コントローラーはonLaunch()メソッドで新しいビューを作成し、それが DOM に注入され、コントローラーはinit()メソッドでバインドされたハンドラーを使用してビュー イベントをリッスンします。ビューが存在する限り、コントローラーも存在します。しかし、ユーザーがビューを閉じると、ビューは破棄され、コントローラーへの最後の参照であるため、コントローラーも破棄されます。
コントローラーで作成されたUPDATE
リスナーはExt.app.EventBusに追加され、コントローラーへの参照も保持する可能性があるため、コントローラーの自動削除を妨げる可能性があります。
を使用して任意の Ext クラスを破棄できますobj.destroy()
。ガベージ コレクションができるように、オブジェクトへのすべての参照も削除することを忘れないでください。