2013-07-17 22 views
12

Tôi có một lớp người chơi. Người chơi có thể có x số Trophies. Tôi có đối tượng PlayerId và cần có danh sách tất cả các danh hiệu của họ.Cách đơn giản để nhận nhiều đối tượng liên quan trong Parse.com bằng Javascript?

Trong trình duyệt dữ liệu Parse.com, đối tượng Player có một cột có tên:

trophies Relation<Trophy> 
(view Relations) 

Điều này có vẻ như nó phải là đơn giản như vậy nhưng tôi đang gặp vấn đề với nó.

Tôi có ParseObject 'chơi' trong bộ nhớ:

Queries quan hệ
var query = new Parse.Query("Trophy"); 
query.equalTo("trophies", player); 
query.find({ 
    /throws an error- find field has invalid type array. 

Tôi cũng đã thử:

var relation = new Parse.Relation(player, "trophies"); 
relation.query().find({ 
    //also throws an error- something about a Substring being required. 

Đây có phải là một nhiệm vụ hoàn toàn thông thường, nhưng tôi không thể tìm ra cách thích hợp để làm điều này.

Bất kỳ ai cũng biết cách thực hiện điều này trong Mã Java của Javscript?

Rất cám ơn!

EDIT--

tôi có thể làm truy vấn quan hệ trên người dùng tốt:

var user = Parse.User.current(); 
var relation = user.relation("trophies"); 
relation.query().find({ 

Tôi không hiểu tại sao điều này chút rất giống nhau phá vỡ mã nếu tôi đang sử dụng một tổ chức phi - đối tượng sử dụng.

Trả lời

5

Cuối cùng tôi đã sắp xếp điều này, mặc dù có một cảnh báo làm cho tác phẩm này khác với tài liệu sẽ chỉ ra.

//Assuming we have 'player', an object of Class 'Player'. 

var r = player.relation("trophies"); 
r.query().find({ 
    success: function(trophies){ 
    response.success(trophies); //list of trophies pointed to by that player's "trophies" column. 
    }, 
    error: function(error){ 
    response.error(error); 
    } 

}) 

Thông báo trước: Bạn phải có một đối tượng người chơi 'đầy đủ' trong bộ nhớ để làm việc này. Bạn không thể lưu đối tượng trình phát, lấy đối tượng từ cuộc gọi lại thành công và có tác phẩm này. Một số lý do, đối tượng được trả về trong trình xử lý thành công dường như là một Parse.Object không đầy đủ và thiếu một số phương thức cần thiết để thực hiện điều này.

Một khối vấp ngã khác về SDK Javascript Parse.com- Truy vấn tìm thấy không có gì vẫn được xem là thành công. Vì vậy, mỗi lần bạn truy vấn một cái gì đó, bạn phải kiểm tra độ dài của phản hồi lớn hơn 0, bởi vì truy vấn thành công có thể đã không trả lại gì cả.

3

Đây là những gì làm việc cho tôi:

 var Comment = Parse.Object.extend("Comment"); 
     var commentsQuery = new Parse.Query(Comment); 
     commentsQuery.equalTo("parent", video);//for the given 'video' instance, find its children (comments) 
     commentsQuery.descending("createdAt"); 
     return commentsQuery.find(); 

Lưu ý: tất nhiên, video là một thể hiện của lớp Video. Và trở về find() có nghĩa là tôi sẽ phải xử lý 'lời hứa' trong bất kỳ hàm nào gọi hàm này.

Và đây là một chức năng đến từ các góc độ khác:

getRecentCommentsOfAllVideos: function(limit) { 
     var Comment = Parse.Object.extend("Comment"); 
     var commentsQuery = new Parse.Query(Comment); 
     commentsQuery.descending("createdAt"); 
     commentsQuery.limit(limit); 
     commentsQuery.include("parent");//this enables the details of the comment's associated video to be available in the result 
     return commentsQuery.find(); 
    } 

(Hãy chắc chắn để đọc https://parse.com/docs/js_guide và tìm kiếm các dòng mà nói "Bao gồm dữ liệu bài với nhau bình luận".)

Tôi cũng đã xem xét các tài liệu này; có lẽ họ sẽ giúp bạn (mặc dù họ không thể giúp ích nhiều cho tôi):

Các vấn đề liên quan