在Parse关系上更新View Relations字段

时间:2015-10-19 21:49:33

标签: javascript parse-platform

我有一个book对象和一个author对象,我想将book对象与作者对象关联起来。我的代码如下所示:

var Author = Parse.Object.extend("Authors");
var myAuthor = new Author();
myAuthor.set("Name", "Dostoievski");
myAuthor.save();

var Book = Parse.Object.extend("Books");
var myBook = new Book();
myBook.set("Title", "The Idiot");
myBook.save();

var relation = myBook.relation("authors");
relation.add(myAuthor);
myBook.save();

但是当我点击myBook对象上的View Relation字段时,我在关系的Name字段中没有任何数据。我的代码有什么问题,我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您发布的内容正是您正在运行的内容,那么您应该有

Uncaught You can't add an unsaved Parse.Object to a relation.
控制台中出现

错误。这是javascript和异步承诺的精彩世界。在我继续解释之前,我在我的控制台中测试了工作代码:

修改

以下是更新的代码。在前面的代码中,我试图将关系保存在错误的变量上。 myAuthor和myBook变量是对您正在创建的新对象的引用,而不是对由promise保存和返回的结果对象的引用。我将变量更改为更明确,以帮助说明问题所在。以下是工作代码。

var Author = Parse.Object.extend("Authors");
var myAuthor = new Author();
myAuthor.set("Name", "Dostoievski");
myAuthor.save().then(function(authorRes){
    var Book = Parse.Object.extend("Books");
    var myBook = new Book();
    myBook.set("Title", "The Idiot");
    myBook.save().then(function(bookRes){
         var relation = bookRes.relation("authors");
         relation.add(authorRes);
         bookRes.save({
                 success: function(relation) {
                     console.log(relation);
                 },
                 error: function(relation, error) {
                     console.log(relation + "::" +error.code+"::"+error.message);
                     }
        });
    });
});

现在,您的代码中发生了什么:

var Author = Parse.Object.extend("Authors");

你现在有一个变量Author,它具有你已经传递过字符串的Parse对象的所有属性" Authors"成。

var myAuthor = new Author();

创建刚刚创建的作者类的新实例名称myAuthor。

myAuthor.set("Name", "Dostoievski");

您已在已创建的作者类上设置了属性。

myAuthor.save();

您已向Parse.com发送请求,要求将新对象保存在Parse上创建的表中。作为回报,Parse向您发送将要发生的承诺(但它还没有实际发生)。

var Book = Parse.Object.extend("Books");
var myBook = new Book();
myBook.set("Title", "The Idiot");
myBook.save();

同样在这里。你完成了上述所有工作,Parse.com已经向你发出了保存myBook的承诺(但它还没有)。

var relation = myBook.relation("authors");
relation.add(myAuthor);
myBook.save();

这里你试图添加一个与myBook的关系(但myBook还没有保存在Parse.com中)。 这是您的代码中断的地方,因为Parse不允许您在不存在的对象上创建关系(因为解析没有创建一个ObjectId用于创建关系) )。

要解决此问题,您必须等到Parse告诉您已完成将对象保存在表中并创建了ObjectId。为此,您可以添加到save()调用...

.then(function(result){
   //now you can do things with the object you just saved. 

});