17

我使用Jerome's localStorage適配器和Backbone,它適用於收藏。將本地存儲模型保存到本地存儲

但是,現在我有一個需要保存的模型。因此,在我的模型中,我設置了:

localStorage: new Store("msg") 

然後我執行保存和獲取。我的問題是每次刷新並初始化我的應用程序時,我的模型的新表示都會添加到localStorage中,請參見下文。

我在做什麼錯?

window.localStorage.msg = { 
    // Created after first run 
    "1de5770c-1431-3b15-539b-695cedf3a415":{ 
    "title":"First run", 
    "id":"1de5770c-1431-3b15-539b-695cedf3a415" 
    }, 
    // Created after second run 
    "26c1fdb7-5803-a61f-ca12-2701dba9a09e":{ 
    "0":{ 
     "title":"First run", 
     "id":"1de5770c-1431-3b15-539b-695cedf3a415" 
    }, 
     "title":"Second run", 
     "id":"26c1fdb7-5803-a61f-ca12-2701dba9a09e" 
    } 
    } 

回答

29

我遇到了同樣的問題。也許你有類似這樣的

var Settings = Backbone.Model.extend({ 
    localStorage: new Store("Settings"), 
    defaults: { a: 1 } 
}); 

var s = new Settings; 
s.fetch(); 

我改

var s = new Settings({ id: 1 }); 

localStorage的適配器支票ID喜歡

case "read": resp = model.id ? store.find(model) : store.findAll(); break; 

所以0""的ID不會工作的東西,它會返回所有型號於一體

+0

正確!謝謝@lublushokolad;) – guillaumepotier

+0

我真的很感謝你指出這一點。你剛剛結束了一天頭痛! –

+3

鏈接到github中的問題/問題https://github.com/jeromegn/Backbone.localStorage/issues/56 –

6

我是新來的骨幹。 js也是如此,但它看起來像持久性模型類似於數據庫表。也就是說,它旨在創建/刪除/從表中讀取記錄。 localStorage適配器也是這樣,所以你在做的是在localStorage中創建一個Msg「表」 ,並且每次創建一個新的Msg「記錄」,並且適配器爲每個新的Msg提供一個唯一的ID。

如果你只有一個對象,直接使用localStorage可能更容易。 API是真的直截了當:

localStorage.setItem("key","value"); 

記住的localStorage只與鍵/值對作爲字符串交易,所以你需要轉換到/從字符串格式。

看看一個這個問題,以獲得更多關於這樣做:

Storing Objects in HTML5 localStorage