我有一个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字段中没有任何数据。我的代码有什么问题,我该怎么办?
答案 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.
});