使用骨干来命中api时,我发现我只需要在响应中包含一些数据。除了有关我不需要的对象的数据之外,Web服务器还给我回传元数据。
以下解决方案有效,但感觉不对。有没有一种标准的方法呢?
var accountsCollection = new AccountsCollection();
accountsCollection.fetch({success : function(collection){
var results = new AccountsCollection();
collection.each(function(item){
results.add(new AccountModel({
id: item.toJSON().result[0].id,
messageText: item.toJSON().messageText,
address1: item.toJSON().result[0].address1,
address2: item.toJSON().result[0].address2
}));
});
onDataHandler(results);
}});
编辑:根据接受的答案,这是我的最终解决方案:
parse: function(response) {
var accounts = [];
_.each(response['result'], function (account) {
accounts.push(account);
});
return accounts;
}
答案 0 :(得分:4)
您可以尝试重写Backbone.Collection.parse
方法并执行一些疯狂的下划线操作。不知道它是否适合您的数据..
var keysILike = ['foo', 'bar'];
AccountsCollection.extend({
parse: function(response) {
return _.compact(_.flatten(_.map(response, function (model) {
var tmp = {};
_.each(_.keys(model), function (key) {
if (_.contains(keysILike, key)) tmp[key] = model[key];
})
return tmp;
})));
}
});
关于@ Sushanth的精彩,你肯定想要使用这个解决方案:
var keysILike = ['foo', 'bar'];
AccountsCollection.extend({
parse: function(response) {
_.each(response, function (model) {
_.each(_.keys(model), function (key) {
if (!_.contains(keysILike, key)) delete model[key]
})
});
return response;
}
});