我想弄清楚一種方法來緩存我的knockoutJS SPA數據,我一直在用amplifyJS進行試驗。下面是我的GET功能之一:用AmplifyJS存儲KnockoutJS建模數據
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
以防本地存儲數據存在users
密鑰,並在更改時更新本地存儲數據。
這種方法的問題是我需要通過模型運行我的數據,而且我無法找到一種方法來執行localStore
函數,該函數保存在單獨的頁面上。
有沒有人與KO和Amplify合作過?你用什麼方法?我應該使用第一個還是嘗試兩者的組合,並重寫擴展器,使其只更新本地存儲,而不在init上寫入observableArray
?
因此......你想要一個持久的緩存層,它不僅能保存服務器數據,而且還能反映用戶的變化。 – Tomalak
是的,用戶更改也需要反映,以便在更新原始對象後刷新頁面或在另一個視圖上請求相同的信息。 – Norbert
您不打算構建可以完全脫機使用的東西,對嗎? – Tomalak