2014-09-02 28 views
0

比方說,我在解析兩個類(表):Parse.com無法輸出合適的JSON

--- TABLE 1: Navigation ------------------- 
objectId 
Name 
Url 
------------------------------------------- 

--- TABLE 2: Items ------------------------ 
objectId 
Navigation (pointer to Navigation class) 
Name 
Price 
------------------------------------------- 

所有我想要的是像下面的一些JSON輸出:

[ 
{ 
name: "Home", 
url: "home" 
}, 
{ 
name: "Menu", 
url: "menu", 
items: [{ 
    name: "French Fries", 
    price: 3.00 
    }, 
    { 
    name: "Hamburger", 
    price: 4.00 
    }, 
    { 
    name: "Cheeseburger", 
    price: 5.00 
    }] 
}, 
{ 
name: "Dinner Menu", 
url: "dinner-menu", 
items: [{ 
    name: "Beer", 
    price: 3.00 
    }, 
    { 
    name: "Wine (glass)", 
    price: 9.00 
    }, 
    { 
    name: "Liquor Premium", 
    price: 8.00 
    }] 
}, 
{ 
name: "Like and Follow Us", 
url: "social-media" 
} 
] 

我已經嘗試了我所有的功能來通過嵌套查詢來進行查詢,以循環使用items。我曾嘗試查看Parse.Promises的文檔,我認爲這是問題的一部分,並且無法使結果像上面那樣顯示。幫幫我!!!

我斷碼:

var mainNav = []; 
var navigationQuery = new Parse.Query(Parse.Object.extend("Navigation")); 
navigationQuery.ascending("SortOrder").find().then(function(navItems) { 

    _.each(navItems, function(navItem) { 

     var newObj = {}; 
     newObj.Name = navItem.get("Name"); 
     newObj.Url = navItem.get("Url"); 
     newObj.Module = navItem.get("Module"); 
     newObj.SortOrder = navItem.get("SortOrder"); 

     var itemQuery = new Parse.Query(Parse.Object.extend("ListItems")).equalTo('Navigation', navItem).ascending('SortOrder').find(function(items) { 
      newObj.Source = items; // not getting added to object! 
     }); 
     mainNav.push(newObj); 

    }); 


}).then(function(items) { 

    res.send(mainNav); 

}); 

回答

0

find()超過itemQuery異步運行,但要添加的查詢,以完成塊外mainNav的結果,所以這段代碼是不太可能的行爲方式你期望它。您可能希望在find()塊中使用Promises在將所有Source項目添加到mainNav之前累積它們。

+0

首先,謝謝你回覆我。你似乎是最有知識的解析人。我很難讓Promises工作。你認爲你可以幫助我以正確的方式寫出代碼嗎?我只需要上面的JSON輸出。我是否以正確的方式去做?我有正確的數據庫架構設置嗎?我不習慣運行異步事件,我似乎無法讓Promises合作並讓我得到我想要的東西。 – boxmatic 2014-09-04 03:38:00