1

グーグルで何日も検索した後、私はついにここで質問することにしました。

私はいくつかのjsonファイルを持っています。

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

jsonこれに似たすべてのファイル構造。しかし、ランダム、ID、日付タイプなどを含むランダムデータ...

[
        {
            "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ファイルを1つにマージし、デフォルトで(初期化時に)日付でソートしたいと考えています。backbone.jsコレクションを使用してマージおよびソートする最良の方法は何ですか?

4

2 に答える 2

1

バックボーンでは、オプションを使用して backbone.sync の一部をオーバーライドできます

  • オプションとしてターゲット URL を渡してcollection.fetch、デフォルトの URL をオーバーライドできます
  • モデルをadd: trueリセットする代わりにコレクションに追加します

つまり、コレクションを構築できます

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

すべてのフェッチが完了したときにコールバックを呼び出すには、jQuery 遅延オブジェクトを作成します。

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'));
});
于 2012-10-22T11:37:44.070 に答える
0

データをマージするには、コレクションと、json オブジェクト/モデル表現を含むすべての配列をこのコレクションに作成するだけです。この機能を実現するには、fetch メソッドをオーバーライドして 3 つの ajax 呼び出しを実行し、jquery deferreds を使用して、3 つすべてが解決され、返されたデータがコレクションに追加されるまで待ってから、fetch 要求を解決します。

並べ替えロジックを変更するには、コレクションコンパレータメソッドを上書きして、データに基づいて並べ替える必要があります。

たとえば、次のように指定できます

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

日付順に並べ替えます。

コレクションにモデルを追加した後に何らかの理由でコンパレータを指定する場合は、sort メソッドを呼び出して、コンパレータによって指定されたルールに従ってモデルがソートされるようにする必要があります。

于 2012-10-22T11:50:51.833 に答える