在Parse中保存基本关系

时间:2015-03-06 13:44:03

标签: parse-platform relation

这个例子很直接,但并不奇怪,它不起作用。 mLate是Late表中的对象或对象数组。 我的代码:

var user = Parse.Object.extend("User"); 
var userQuery = new Parse.Query(Parse.User);        
var Late = Parse.Object.extend("Late");        
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
     success: function (userDetails) {
           var relation = userDetails.relation("mLate");
           relation.add(mLate);
           userDetails.save(); 

鉴于Parse SDK,我无法想象我哪里出错了。我一直在 POST https://api.parse.com/1/classes/_User/yCDDEWoiwM 400(错误请求)


新的假设和更多代码

我知道这是非常简单的事情,我很生气,Parse很少会为他们的解释添加细微的细节。你见过他们的API(好吧,我不想上我的肥皂盒......)

我的假设是我多次从Late表中转换了Parse.Object,并且不知何故Parse不再知道那里发生了什么。

以下是对代码的更全面的了解:

var user = Parse.Object.extend("User"); 
    var userQuery = new Parse.Query(Parse.User);        
    var Late = Parse.Object.extend("Late");        
    var lateQuery = new Parse.Query(Late);
    userQuery.get("yCDDEWoiwM", {//this is where the userID goes
         success: function (userDetails) {
mLate = [];
mLate1 = [];

lateQuery.find({
     success: function (allLate) {
          var aLate = allLate
          for (var i = 0; i < aLate.length; i++){
          var oneLate = aLate[i];
          if(something valid) {
          mLate.push(oneLate)
          }else{
          mLate1.push(oneLate)

var relation = userDetails.relation("mLate");
               relation.add(mLate);
               userDetails.save();

2 个答案:

答案 0 :(得分:2)

您不能以这种方式扩展用户。所有特殊类(用户,安装,角色等)都应该像这样解决:

"_User", "_Roles", "_Installation"

所以例如:

var user = Parse.Object.extend("_User");

但以这种方式引用它们会更好:

var user = Parse.Object.extend(Parse.User);

但据我所知,你也不需要创建user对象的第一行。你也不需要&#34;延伸&#34;一个对象,如果您想要做的就是创建一个查询。通常&#34;延伸&#34;如果你想创建一个指针,但在你的情况下,你不需要。

看看这是否适合你:

//var user = Parse.Object.extend(Parse.User); 
var userQuery = new Parse.Query(Parse.User);        
//var Late = Parse.Object.extend("Late");        
var lateQuery = new Parse.Query("Late");
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
     success: function (userDetails) {
           var relation = userDetails.relation("mLate");
           relation.add(mLate);
           userDetails.save(); 

如果您想让查询更具动态性,您可以这样做:

var userQuery = new Parse.Query(Parse.User);               
queryQuery.equalTo("objectId", userId); 
userQuery.first().then(function(userDetails){

   var relation = userDetails.relation("mLate");
   relation.add(mLate);

   return Parse.Promise.when(userDetails.save());
}).then( // make your call to response.success ...);

另一个可能的问题是,在userDetails.save()操作有机会完成之前,您的函数正在返回。如果您将查询修改为类似上述内容以使用Promise,那么它将保证对save()的异步调用将实际完成。

未显示的是保留链的延续,可以调用response.successerror,但您可以添加。{/ p>

答案 1 :(得分:0)

意图没有100%明确,因为没有定义mLate变量,但你可以得到这样的用户:

var user = new Parse.User({id:"yCDDEWoiwM"});
user.fetch().then(function(user) {
    // add to the relation here, then
    return user.save();
}).then(function () {
    console.log("saved");
});