ノックアウト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
、私が使用したアプローチについては確信が持てません。また、アプリ全体に同様の機能が他にもたくさんあるので、可能であれば余分なコードを避けたいと思います。removeUser
editUser
次のように、の助けを借りて物事を処理する方法を見つけましたko.extenders
。
this.usersArr = ko.observableArray().extend({ localStore: 'users' });
次に、ko.extenders.localStore
関数を使用して、 内で変更が検出されるたびにローカル ストレージ データを更新しobservableArray
ます。そのため、キーobservableArray
のローカル ストレージ データが存在する場合は init に書き込み、変更時にローカル ストレージ データを更新します。users
このアプローチに関する私の問題は、モデルを介してデータを実行する必要がありlocalStore
、別のページに保持されている関数からそれを行う方法を見つけることができなかったことです。
KO と Amplify で作業したことのある人はいますか? どのようなアプローチを使用しましたか? observableArray
最初のものを使用するか、2 つの組み合わせを試して、 on initに書き込まずにローカル ストレージのみを更新するようにエクステンダーを書き直す必要がありますか?