2015-10-19 22 views
3

我有一本書對象和一個作者對象,我想將書對象與作者對象關聯起來。我的代碼如下所示:更新分析關係上的「查看關係」字段

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對象上我沒有關係中的名稱字段中的任何數據。我的代碼出了什麼問題,我應該怎麼做?

+0

打開你的控制檯...有沒有被捕獲你不能添加一個未保存的Parse.Object到關係。錯誤? –

+1

是的,那種錯誤。 –

回答

1

如果您已經張貼的是你正在運行什麼,那麼你應該在你的控制檯

Uncaught You can't add an unsaved Parse.Object to a relation. 

錯誤。這是javascript和異步promise的美妙世界。之前我一直在這裏解釋工作我在控制檯測試代碼:

編輯:

以下是更新的代碼。在之前的代碼中,我試圖將關係保存在錯誤的變量上。 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"); 

您現在有一個可變的作者具有解析的所有屬性對象,你已經通過了字符串「作者」到。

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. 

}); 
+0

這工作正常,沒有任何erros這次:)但我仍然沒有得到任何字段更新在myBook對象的視圖關係字段... http://postimg.org/image/5h4vt3ahp/ 名稱字段的關係不應該包含myAuthror的名字的值? –

+0

今晚我會來看看 –

+0

@IulianConstantinRedinciuc對不起,我用正確的代碼更新了答案。如果所有問題都解決,請點擊複選標記。 :-D –