在 Parse Cloud Code 中保存“没有数据的对象”指针

Posted

技术标签:

【中文标题】在 Parse Cloud Code 中保存“没有数据的对象”指针【英文标题】:Save "object without data" pointer in Parse Cloud Code 【发布时间】:2015-10-16 16:24:45 【问题描述】:

是否可以在对象中保存“空”对象以保存引用,而不必在之前获取完整对象?

我正在这样做:

var myObject = new MyObject();
myObject.id = "id I retrieved somewhere on my client device"

// later
var user = request.user;
user.set("key", myObject);

但它不起作用,它说 “无法创建指向未保存 ParseObject 的指针”

【问题讨论】:

为什么要这样做?如果您要从用户指向的子 obj 在服务器上尚不存在,则只需在 user.key 中将属性设置为“未定义”,即在创建 MyObject 的云代码中,考虑 'before' , 'after' 事件挂钩并更新 user.key 实际上,该对象存在于服务器上,但我只有它的 id(作为参数传递给我的云函数)。 查询 ID 然后添加指针 OR.. 如果 obj 存在并且您想要创建一个指向它的新指针而不引用实际对象(仅限 id),您可以通过结合 AJAX 请求来做到这一点使用以下创建指针的 Curl REST 示例.... POST -d ' "$Column":"__op":"AddRelation","objects":["__type":"Pointer","className" :"$Class","objectId":"$ID"]' api.parse.com/1/classes/$class 【参考方案1】:

我认为createWithoutData 方法是您正在寻找的。所以在你的情况下,它会是这样的:

 var ClassOfMyObject = Parse.Object.extend("ClassOfMyObject");
 var myObject = ClassOfMyObject.createWithoutData("myObjectId");

 // later
 var user = request.user;
 user.set("key", myObject); 

希望这能回答你的问题。

【讨论】:

【参考方案2】:

解决方案1:(不是真正的解决方案,只是解释)

要在 Parse.com 中创建指针或关系,您必须首先将对象放置在那里。

解决方案 2: 但是,您可以在您的 Class 中创建一个文本列并通过这些文本属性引用而不是使用 Parse 关系。本质上,为存储为文本值的对象创建自己的 Id。

如果你决定走这条路,你需要确保你基本上有一个唯一的 ID,因为使用 Parse 自动递增是很困难的。我自己使用这个解决方案。

Create GUID / UUID in javascript?

function guid() 
function s4() 
return Math.floor((1 + Math.random()) * 0x10000)
  .toString(16)
  .substring(1);

 return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
 s4() + '-' + s4() + s4() + s4();


var uuid = guid();

我将其放置在 Angular 工厂中以在我的 SPA 中使用。

使用文本字段并通过这些值进行引用的唯一问题是它计入查询和对它们的各种限制。如果您有关系,则无需重复查询即可返回关系。

我通常根据每个特定数据集的需要将两者结合使用。

解决方案 3:

关于拥有一个“空对象”。是的,您可以创建一个空对象,然后用数据填充它。只要对象是在 Parse 中创建的并且具有 objectId,它就可以用于创建关系。

但请确保在创建关系之前已创建并保存关系模式中的所有对象,然后再次保存。

【讨论】:

以上是关于在 Parse Cloud Code 中保存“没有数据的对象”指针的主要内容,如果未能解决你的问题,请参考以下文章