2015-11-02 49 views
-1
  • 前端獲取從API活動
  • 用戶可以寫評論的活動
  • 我想點擊一個按鈕後,獲取的評論

的代碼生成2個調用:的JavaScript如何在這種情況下,拼接

  1. 獲取活動並將它們存儲在變量活動中。
  2. 從不同的端點

    //get activities 
        dsActivity.getActivities(query) 
         .then(function (items) { 
          var activities = items.plain(); 
    
          for (var i = 0; i < activities.length; i++) { 
    
           //get totalComment count 
           dsActivity.getActivityCount(activities[i].id) 
            .then(function (result) { 
             var totalComments = result.plain(); 
             activities = totalComments; 
            }.bind(this)); 
    
           this.items.push(activities); 
          } 
          if (this.offset < items.meta.page_count) { 
           this.offset += 1; 
          } else { 
           return; 
          } 
          this.busy = false; 
         }.bind(this)); 
    

它目前還無法以包括API的activitiy端點這一領域獲得commentCount。這就是爲什麼我想通過使用JS將它們放在一起的原因。

數據結構

VAR活動: 這裏有活動

{ 「文」: 「第一個活動」, 「隱私」:空, 「createdAt」:{ 「date」:「2015-10-27 00:16:24.000000」, 「timezone_type」:3, 「timezone」:「Europe/Berlin」 }, 「id」:1, 「意見」:{}, }

VAR totalComments 這裏是commentCount

{ 「意見」:{ 「TOTAL_ITEMS」:6 } }

  • 我如何將以下數據結構放在一個數組中?
+0

你需要弄清楚正在從服務器返回的數據。 「項目」看起來像什麼? – forgivenson

+0

更好,但你仍然不包括你想要的數據。你只是試圖在你的活動中將'comments'的值設置爲'totalComments'的值? – forgivenson

+0

@forgivenson:是的,我試着在我的帖子中提供更多信息。 –

回答

-1

您可以添加commentCount作爲原始數據的屬性。 data.commentCount = count.commentCount;

//get activities 
dsActivity.getActivities(query) 
    .then(function (items) { 
     //For every item returned from getActivities 
     for (var i = 0; i < items.plain().length; i++) { 
      //Get the current # of Comments from getActivityCount 
      dsActivity.getActivityCount(items.plain()[i].id) 
       .then(function (result) { 
        //Add the returned object to the original items 
        items.plain()[i].comments = (result.plain()).comments; 
       }.bind(this)); 
     } 
     if (this.offset < items.meta.page_count) { 
      this.offset += 1; 
     } else { 
      return; 
     } 
     this.busy = false; 
    }.bind(this));  

JSFiddle證明使用原始對象工作的代碼。

的Javascript中的jsfiddle

var activities = { "text": "first activity", "privacy": null, "createdAt": { "date": "2015-10-27 00:16:24.000000", "timezone_type": 3, "timezone": "Europe/Berlin" }, "id": 1, "comments": {}, } 

var totalComments = { "comments": { "total_items": 6 } } 

activities.comments=totalComments.comments 

//The console prints the full object 
console.log(activities); 

//Prints the comments saved in activities (Should be 6) 
document.write(activities.comments.total_items); 
+0

我試過了你的建議。不幸的是,我只在最後一個數組對象中有了commentCount。我需要爲每個活動設置commentCount。它每次迭代都覆蓋data.commentCount。 –

+0

使用getActivities和getActivityCount返回哪些數據結構? –

+0

getActivities:{text:「」,createdAt:「」,「評論:」「} getActivitiyCount:{」comments「:{」total_items「:6}} 我已經改變了他們幾分鐘前得到它們更容易在一起 我需要將getActivitiyCount中的「註釋」轉換爲getActivities「comment」 –

0
splice

是一個陣列的方法。由於您正試圖向對象添加值,因此在這種情況下,splice對您無用。(見docs有關如何使用splice資訊)

所有你需要做的是:

activities[i].comments = result.plain(); 

這將在對象activities[i]result.plain()值賦給屬性comments

+0

我已經試過了。我收到以下錯誤: [錯誤]無法設置未定義的屬性「註釋」 –

+0

然後'活動[i]'是未定義的。你需要找出原因。很顯然,你的'getActivities'方法並沒有返回你認爲的那樣。 – forgivenson

0

現在它似乎工作,但是有沒有辦法在將數據推送到數組之前等待回調?

//get activities 
dsActivity.getActivities(query) 
    .then(function (activityRes) { 
     var activities = activityRes.plain(); 
     for (var i = 0; i < activities.length - 1; i++) { 
      //get totalComment count 
      dsActivity.getActivityCount(activities[i].id) 
       .then(function (result) { 
        console.log(result.plain()); 
        activities[i].comments = result.plain(); 
       }.bind(activities[i])); 
      this.items.push(activities[i]); 
     } 
     console.log(this.items); 
     if (this.offset < 1) { 
      this.offset += 1; 
     } else { 
      return; 
     } 
     this.busy = false; 
    }.bind(this)); 

下面一行是問題,它不會等到result.plain()填充:

activities[i].comments = result.plain();