假设我有一个需要填充的(例如搜索结果)集合以及需要获取当前页面值,总页数等的分页模型。在我的控制器中,我进行GET调用返回 搜索结果和分页信息的API。那么,我如何获取所有这些信息并将其解析为一个集合和一个单独的模型?这可能吗?
我正在使用AirBNB的Rendr,它允许您使用统一的代码库在服务器和客户端上运行Backbone。 Rendr强迫我将API响应解析为一系列模型,使我无法访问分页信息。
在Rendr中,我的控制器看起来像这样:
module.exports = {
index: function (params, callback) {
var spec = {
pagination: { model: 'Pagination', params: params },
collection: { collection: 'SearchResults', params: params }
};
this.app.fetch(spec, function (err, result) {
callback(err, result);
});
}
}
如果不够明确,我道歉。请随时询问更多信息!
答案 0 :(得分:2)
这是超级老,所以你现在可能已经把它弄清楚了(或者放弃它)。这是一个与Rendr一样的骨干问题,因为API响应是非标准的。
Backbone建议,如果您有非标准API响应,那么您需要覆盖精确数据格式的解析方法。
如果你真的想要分解它,你可能想要编码的方式是:
index: function (params, callback) {
var spec = {
model: { model: 'Search', params: params }
};
this.app.fetch(spec, function (err, result) {
callback(err, result);
});
}
var Base = require('./base'),
_ = require('underscore');
module.exports = Base.extend({
url: '/api/search',
parse: function(data) {
if (_.isObject(data.paginationInfo)) {
data.paginationInfo = this.app.modelUtils.getModel('PaginationInfo', data.paginationInfo, {
app: this.app
});
}
if (_.isArray(data.results)) {
data.results = this.app.modelUtils.getCollection('SearchResults', data.results, {
app: this.app,
params: {
searchQuery: data.searchQuery // replace with real parameters for client-side caching.
}
});
}
return data;
}
});
module.exports.id = 'Search';