1

ノックアウトJS SPAデータをキャッシュする方法を見つけようとしており、amplifyJSを試しています。これが私のGET関数の1つです:

UserController.prototype.getUsers = function() {
   var self = this;

   return $.ajax({
      type: 'GET',
      url: self.Config.api + 'users'
   }).done(function(data) {
      self.usersArr(ko.utils.arrayMap(data.users, function(item) {
         // run each item through model
         return new self.Model.User(item);
      }));         
   }).fail(function(data) {
      // failed
   });
};

同じ関数「増幅」は次のとおりです。

UserController.prototype.getUsers = function() {
   var self = this;

   if (amplify.store('users')) {
      self.usersArr(ko.utils.arrayMap(amplify.store('users'), function(item) {
         // run each item through model
         return new self.Model.User(item);
      }));
  } else {
     return $.ajax({
        type: 'GET',
        url: self.Config.api + 'users'
     }).done(function(data) {
        self.usersArr(ko.utils.arrayMap(data.users, function(item) {
           // run each item through model
           return new self.Model.User(item);
        }));         
     }).fail(function(data) {
      // failed
   });
};

これは期待どおりに機能しますがaddUser、私が使用したアプローチについては確信が持てません。また、アプリ全体に同様の機能が他にもたくさんあるので、可能であれば余分なコードを避けたいと思います。removeUsereditUser

次のように、の助けを借りて物事を処理する方法を見つけましたko.extenders

this.usersArr = ko.observableArray().extend({ localStore: 'users'  });

次に、ko.extenders.localStore関数を使用して、 内で変更が検出されるたびにローカル ストレージ データを更新しobservableArrayます。そのため、キーobservableArrayのローカル ストレージ データが存在する場合は init に書き込み、変更時にローカル ストレージ データを更新します。users

このアプローチに関する私の問題は、モデルを介してデータを実行する必要がありlocalStore、別のページに保持されている関数からそれを行う方法を見つけることができなかったことです。

KO と Amplify で作業したことのある人はいますか? どのようなアプローチを使用しましたか? observableArray最初のものを使用するか、2 つの組み合わせを試して、 on initに書き込まずにローカル ストレージのみを更新するようにエクステンダーを書き直す必要がありますか?

4

1 に答える 1