经过几天的谷歌搜索,我终于推动自己在这里提出问题。
我的文件很少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文件合并为一个并默认按 date 排序(初始化时)。使用集合使用backbone.js
进行合并和排序的最佳方法是什么?
答案 0 :(得分:1)
Backbone允许您通过选项
覆盖一些backbone.synccollection.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'));
});
答案 1 :(得分:0)
要合并数据,只需创建一个集合,并将所有带有json对象/模型表示的数组添加到此集合中。为了实现这一功能,您可以覆盖fetch方法并使其执行3次ajax调用并使用jquery延迟等待,直到解析所有这三种方法,并在解析获取请求之前将返回的数据添加到集合中。
要更改排序逻辑,您需要覆盖集合comparator方法,以根据您的数据进行排序。
您可以将其指定为例如此
comparator: function(model) {
return +new Date(model.get('date'));
}
它会按日期排序。
如果您因为任何原因在将模型添加到集合后指定比较器,则需要调用sort方法,以便模型根据比较器指定的规则进行排序