【发布时间】:2015-02-05 16:20:45
【问题描述】:
我想将一个对象作为 JSON 字符串保存到本地存储以供离线渲染。此时只需要写函数进行测试。我的问题是为什么只有一个键/值字符串(数组)写入 localStorage?
我尝试过的
这是我要保存的对象。
Addr_states
-JhMZ6QjAm0FRAcRjivP
Country:
State:
-JhMdqTXuayd00hqkp_E
Country:
State:
-JhMgVVy_58upfBjf0sO
Country:
State:
-JhMjte-ujgsmxgyX8Zf
Country:
State:
-JhMkPrScGjvRNVna4Hp
Country:
State:
-JhOYj6j4lW4Y38wJDsN
Country:
State:
到目前为止,这是我的代码:
function myDataStore (myDataPass)
{localStorage.setItem("States", JSON.stringify(myDataPass));}
if (myStorageStatus == true)
{
if (myOnlineStatus == false)
{
myDataSource = "Local Storage";
}
else
{
myDataSource = "Web Firebase";
localStorage.removeItem("States");
var myDataRead = new Firebase('https://myappURL/Addr_states');
myDataRead.on('child_added', function(snapshot) {
myDataGroup = snapshot.val();
console.log(myDataGroup);
myDataStore (myDataGroup);
});
}
}
注意事项
当将变量
myDataGroup的转换拉入快照函数时,我将最后一个键/值数组作为一个字符串,没有键(在上面的对象中看到)或最后更新的元数据。在函数之外,结果(在开发者控制台中)显示为一个空对象。myDataGroup被声明在代码块的顶部,在函数范围之外。-
更改为添加以下评论者建议的代码 - 在州的最后一个生成单个字符串(数组) - 这 - {"Country":"USA","State":"Utah"}
【问题讨论】:
-
如果您处于离线状态,您将如何从 Firebase 获取数据?问题是代码是异步的。它不会存在于回调闭包之外,您需要在回调中触发一个函数,将数据作为 arg 传递并进行 isOffline esq 检查
-
Natedog — 我尝试稍微修正一下语法和问题结构,但我不确定您在笔记中的确切含义。是不是回调内
myDataGroup变量的值是回调外的null(或{})? -
还没有写那个函数。不会有冷启动。应用程序将最初在线连接,然后在每次页面刷新时更新。当离线应用程序将恢复为 localStorage 'array'。将来会快速添加对时间戳的检查,以便之后快速更新本地存储。
-
Jordan - 除非 setItem 在函数内移动,否则没有开发控制台在回调时显示空字符串。上面的数组只是 firebase 'table' (nosql) 格式的副本 - 它有国家作为美国,然后各种州作为键/值,美国作为链接事件的索引
-
我看到了代码、数据和语句/注释。但是你的问题是什么?
标签: javascript jquery firebase