0

私はここで間違った道を進んでいるかもしれませんが、ここに行きます:

私のPhoneGap Durandalアプリには、最初にヒットしたときにのみデータを返すプロファイルビュー/ VMがあります。その後、initializedと呼ばれるboolをチェックし、2回目にDBにヒットしません。これはうまくいきます。

ただし、ログアウト後、キャッシュを無効にする必要があります。メッセージを使用してプロファイル VM に変数をクリアする (つまり、キャッシュを無効にする) ように指示することもできますが、Durandal でこれを行うための高レベルの方法があると思いました。たとえば、ログアウト時に、メモリ内のすべての ViewModel を破棄するように指示します。 (セッション固有の情報を持つ他の Singleton オブジェクトが存在する場合があります)。

アドバイスお願いします...

4

2 に答える 2

1

これはより JavaScript に関する質問であり、これは JavaScript がどのように機能するかについての私の理解です。

Javascript は、ガベージ コレクションと呼ばれるメカニズムを通じて、参照されなくなったオブジェクトを自動的に破棄します。

これは、ガベージ コレクションのしくみに関する優れた記事です。基本的に、プログラムで参照されなくなったオブジェクトを破棄します。

オブジェクトを削除できる JavaScript の別のメソッドがあります。削除方法:

delete someobj;

どちらも私の知識はほとんど同じですsomeobj = undefined;

お役に立てれば。

***編集

Durandal は、ビューモデルのスクリーン アクティベーター パターンに従います。ビューモデルのライフサイクルとは別に、activate、candeactivate、およびdeactivateメソッドを呼び出します。

activate メソッドで破棄を行うことができます。

于 2013-07-28T13:14:14.707 に答える
0

(Durandal 2.0) ビューモデルのコンポジション ライフサイクル コールバック メソッドにいつでもフックできます。activate()、attached()、deactivate()、および detached() の 4 つがあります。それらが存在する場合、view-model で Durandal によって自動的に呼び出されます。私のプロジェクトでは、キャッシュを無効にするビューが必要な場合は、deactivate() メソッドにフックし、そこにクリーンアップ ロジックを配置します。同様に、detached() メソッドを使用して、イベントのバインドを解除し、UI ウィジェットを破棄します。

簡単な例:

define(['modules/myDataService'], 
function(dataservice) {
  var cache;

  function activate() {
    return dataservice.getData().done(function(response) {
      cache = response;
    });
  }

  function deactivate() {
    cache = null;
  }

  return {
    activate: activate,
    deactivate: deactivate
  };
});

ソース ドキュメント: http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks/

于 2013-08-21T20:55:45.870 に答える