【问题标题】:Simple Parse.com Localstorage solution简单 Parse.com 本地存储解决方案
【发布时间】:2012-08-30 04:34:02
【问题描述】:

有没有人有一个很好的解决方案来将Parse.com objects 存储到 Javascript 项目的 localStorage 中?

我遇到的问题是,在转换 object to JSON 时,我们丢失了对象上的 id。这是因为Parse.com objects 中的 id 未存储在属性中。
给我一些提示。
提前致谢。

更新 我的小例子

var Something = Parse.Object.extend("Something");
var something = new Something();
something.set("attribute1", "attribute1");
something.save(null, {
        success: function(obj) {
            something.fetch({
                success: function(obj) {
                    console.log("object:"); console.log(obj); 
                    console.log("json:");     console.log(JSON.stringify(obj));
                },
            })
        },
    })

给出这个输出:

object: appmob.js:1563
d.hasOwnProperty.f
_changing: false
_escapedAttributes: Object
_existed: true
_hasData: true
_hashedJSON: Object
_opSetQueue: Array[1]
_pending: Object
_previousAttributes: Object
_saving: false
_serverData: Object
_silent: Object
attributes: Object
changed: Object
cid: "c0"
createdAt: Mon Sep 03 2012 15:43:50 GMT+1000 (EST)
id: "e419YJmhR5"
updatedAt: Mon Sep 03 2012 15:43:50 GMT+1000 (EST)
__proto__: c

** 有 id。

json: 
{"attribute1":"attribute1","attribute2":"attribute2"} 

** 没有id。

这与这个 stackoverflow 问题有关 Backbone model .toJSON() doesn't render all attributes to JSON

所以我想知道将 JSON 字符串存储到本地存储中的最简单方法是什么。

【问题讨论】:

  • 根据 REST 文档,ID 确实在对象中返回,parse.com/docs/rest#objects-retrieving,请参见 objectId 字段。你没看到吗?
  • 嗨,Ray,我正在使用 Javascript API。 parse.com/docs/js_guide#objects-retrieving。当您获取对象时,id 是对象的属性。而对象的属性存储在一个称为属性的数组中。当您在对象上调用 getJSON() 时,它会将属性数组的值作为对象减去 id 返回。
  • 所以要明确一点,你不能像他们记录的那样做 ob.id 吗?你有这个在线我们可以看到的地方吗?
  • @RaymondCamden 嗨,雷。我已经用代码示例更新了这个问题。
  • 哇 - 我希望你的编辑也改变了一些文字,如果没有,我真的误读了你的问题,我深表歉意。我以为您是在说对象的 Parse API 的结果不包括该对象。但相反,您说它确实如此,但是当您将结果转换为 JSON 时,您不会在字符串中获得 ID。那是完全不同的。让我尝试重新创建它。

标签: local-storage parse-platform


【解决方案1】:

您可能有兴趣了解 Parse 对其 JS SDK 所做的更新:

v1.1.10 - 2012 年 11 月 13 日

Parse.Object 的扩展 JSON 序列化:在 Parse.Object 上调用 JSON.stringify() 现在将在输出中包含默认属性“objectId”、“createAt”和“updatedAt”。

【讨论】:

  • 啊..酷。感谢您更新此答案。
【解决方案2】:

好的,据我所知(参见上面的 cmets),Parse 的原生 JS API 假设您只想序列化对象的属性(即核心数据),而不是实际的元数据,包括 ID、created 等. 因为他们真的希望你只在他们的系统上存储东西,这是有道理的。但是,您可以编写自己的代码来自己处理。例如,下面的这个方法获取两个元数据键(id 和 createdAt,还有更多,但我只是在测试)并为核心属性创建一个名为“数据”的键。

function serializeParseObject(pob) {
  var ob = {};
  ob.id = pob.id;
  ob.createdAt = pob.createdAt;
  ob.data = pob.attributes;
  return JSON.stringify(ob);
}

我测试了一个示例结果对象,它工作正常。同样,尽管您可能希望添加其他元数据键以确保完整性。 (或者也许你只关心 id。)

【讨论】:

  • 谢谢@raymond。我猜他们确实希望将数据存储在他们的系统上。我正在使用 localstorage 来减少对解析云的调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多