2012-10-22 393 views
1

經過幾天在谷歌上搜索,我終於推動自己在這裏問問題。將幾個json文件合併爲一個

我有幾個json文件。

localhost/feed01.json 
localhost/feed02.json 
localhost/feed03.json 

所有的json文件結構與此相似。但隨機數據,包括隨機,編號,日期等類型...

[ 
     { 
      "id":1, 
      "date": "12/12/2011", 
      "type": "Run", 
      "distance": "3 miles", 
      "comments": "This was really hard", 
      "minutes": 36 
     }, 
     { 
      "id":2, 
      "date": "12/11/2011", 
      "type": "Bike", 
      "distance": "6 miles", 
      "comments": "All down hill...felt like nothing", 
      "minutes": 30 
     }, 
     { 
      "id":3, 
      "date": "12/10/2011", 
      "type": "Walk", 
      "distance": "2.5 miles", 
      "comments": "Shouldn't have taken the dog", 
      "minutes": 45 
     } 
] 

現在我想通過日期在默認情況下(在初始化)合併所有這JSON文件到一個和排序。使用集合合併和排序使用backbone.js的最佳方法是什麼?

+0

jQuery有['$指定的規則進行排序後指定的比較.merge'](http://api.jquery.com/jQuery.merge/)。 – 2012-10-22 11:04:22

+0

感謝評論@Tichodroma。那backbone.js呢? –

回答

0

要合併的數據只需要創建一個收集和所有JSON對象/模型表示這個集合的陣列。爲了達到這個能力,你可以重寫fetch方法,並且讓它執行3個Ajax調用,並且使用jquery延遲等待,直到解決所有這三個問題,並在解析獲取請求之前將返回的數據添加到集合中。

要改變排序邏輯,您需要覆蓋集合comparator方法根據您的數據進行排序。

,你可以,例如將其指定爲這個

comparator: function(model) { 
    return +new Date(model.get('date')); 
} 

,它會按日期排序。

,如果您無論出於何種原因將這些模型來收集你需要調用的排序方法,使模型會根據比較

1

骨幹,您可以覆蓋一些backbone.sync通過選項

  • 可以傳遞一個目標URL作爲一個選項collection.fetch覆蓋默認網址
  • 並通過add: true追加車型的集合,而不是其重置

,這意味着你可以建立一個收集與

var c = new Backbone.Collection(); 
c.fetch({ 
    url: ('localhost/feed01.json'), 
    add: true 
}); 
c.fetch({ 
    url: ('localhost/feed02.json'), 
    add: true 
}); 
... 

要調用的回調時,取全部完成,你可以建立一個jQuery deferred object

var files = ['localhost/feed01.json', 'localhost/feed02.json', 'localhost/feed03.json']; 
var c=new Backbone.Collection(); 
var dfds = [], dfd, i, l; 
for (i=0, l=files.length; i<l;i++) { 
    dfd = c.fetch({ 
     url: (files[i]), 
     add: true 
    }); 
    dfds.push(dfd); 
} 

$.when.apply(null, dfds).done(function() { 
    console.log(c.pluck('id')); 
});