2013-12-16 68 views
1

這是一個後續問題this覆寫localStorage的使用JSON

我開始使用localStorage的功能, 和我不能確定是否其工作按預期。

我想覆蓋我的JSON文件中的布爾值。

玩家在一個階段擊中退出,然後觸發下一階段的負載,但我也希望它保存舞臺已完成的事實。

這裏是我的JSON數組,定義所有地牢默認情況下不完整:

var dungeon_prog = { 
"dungeon0_prog" : { 
    "complete" : true 
}, 
"dungeon1_prog" : { 
    "complete" : false 
}, 
"dungeon2_prog" : { 
    "complete" : false 
} 
}; 

然後,我將它設置爲本地存儲:

localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog)); 
var dungeon_prog_obj = JSON.parse(localStorage.dungeon_prog); 

我希望它覆蓋dungeon1_prog「完整」 falsetrue當玩家在地牢1中出局。

我該怎麼做? 是實際保存在localStorage中的默認「false」語句嗎? 謝謝。

+2

難道您不能只更改解析的JSON中的值並restringify? – Manishearth

+2

'dungeon_prog_obj.dungeon1_prog.complete = true',他們再次執行'setItem()':'localStorage.setItem('dungeon_prog',JSON.stringify(dungeon_prog_obj));' –

+0

@Manishearth感謝評論。林不知道那是什麼。 –

回答

2

dungeon_prog_obj現在擁有您的JSON對象。要回答你的最後一個問題,是的 - localStorage保存了整個JSON字符串,因此它也保存了布爾值。

覆蓋它,你只需要設置的布爾值,並重新保存到同一localStorage的項目:

dungeon_prog_obj.dungeon1_prog.complete = true; 
localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog_obj)); 

編輯

更新,以回答評論的問題,每個請求。

我不是100%確定這是問題,但您是說在頁面刷新true值不會持續。唯一合理的解釋是,在每次頁面加載時,您都會使用localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));覆蓋最初的JSON,其中dungeon_prog是您的問題中指定的初始JSON。

而不是這樣做,你應該檢查負載,如果你有在localStorage項目。您可以通過以下方式執行此操作:

// Check for object in localStorage 
var dungeon_prog = JSON.parse(localStorage.dungeon_prog); 

// If it does not exist, initialize it and save it 
if (dungeon_prog != null) { 
    dungeonProg = { 
     "dungeon0_prog" : { 
      "complete" : true 
    }, 
    "dungeon1_prog" : { 
     "complete" : false 
    }, 
    "dungeon2_prog" : { 
     "complete" : false 
    } 
    }; 

    localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog)); 
} 
+0

謝謝!我試過了,但是這個函數在你的代碼下可能會造成問題: '$(「#dungeon_prog_btn」)。click(function(){\t console.log(「Dungeon 0(Debug stage)complete ?:」+ dungeon_prog_obj.dungeon0_prog.complete); \t \t的console.log( 「是地牢1個完整?:」 + dungeon_prog_obj.dungeon1_prog.complete); \t \t的console.log( 「是地牢2完整?:」 + dungeon_prog_obj.dungeon2_prog。完成); \t});' 它給了我一個「dungeon_prog_obj未定義」的錯誤。這是因爲dungeon_prog爲空嗎? –

+1

@NaotoIda如果它爲空,當然你會得到'undefined'。我不明白什麼不適合你。像這樣想:'localStorage'是一個數據庫。在加載時,你檢查你的數據庫中的* dungeon_prog *項目。如果它在那裏,則將其存儲在一個變量中並使用它。如果沒有,則使用問題中發佈的代碼對其進行初始化,並將其保存到'localStorage'中,然後使用它。通過這種方式,在下一次加載時,你可以在'localStorage'中找到它。 –

+1

非常感謝你,現在它按預期工作。儘管這並不足以表達我的讚賞,但我希望如果您有興趣,我可以讓您在發佈前儘早玩這款遊戲。 –