我试图找出一个可以处理检索的Collection / Model系统 数据给出了它所要求的背景,例如:
可用" root"资源:
/api/accounts
/api/datacenters
/api/networks
/api/servers
/api/volumes
可用" sub"资源:
/api/accounts/:id
/api/accounts/:id/datacenters
/api/accounts/:id/datacenters/:id/networks
/api/accounts/:id/datacenters/:id/networks/:id/servers
/api/accounts/:id/datacenters/:id/networks/:id/servers/:id/volumes
/api/accounts/:id/networks
/api/accounts/:id/networks/:id/servers
/api/accounts/:id/networks/:id/servers/:id/volumes
/api/accounts/:id/servers
/api/accounts/:id/servers/:id/volumes
/api/accounts/:id/volumes
然后,根据Collection / Model系统,我可以做以下事情:
// get the first account
var account = AccountCollection.fetch().first()
// get only the datacenters associated to that account
account.get('datacenters')
// get only the servers associated to the first datacenter's first network
account.get('datacenters').first().get('networks').first().get('servers')
不确定这是否有意义,所以如果我需要澄清任何内容,请告诉我。
关于为什么我希望能够做到这一点的最大努力,就是如果
请求被提出(即account.get('datacenters').first().get('networks')
)
还没有制作(该数据中心的网络没有加载到客户端)
那么它可能是(也可能是fetch()
d?)
您可以提供任何帮助,我们将不胜感激!
答案 0 :(得分:0)
您可以将选项传递给将被转换为querystring params的fetch。
例如:
// get the first account
var account = AccountCollection.fetch({data: {pagesize: 1, sort: "date_desc"}});
会转换为:
/api/accounts?pagesize=1&sort=date_desc
它不是一个流畅的DSL,但它具有表现力和效率,因为它只传输所请求的对象而不是过滤后期提取。
修改强>
您可以延迟加载子集合并使用相同的fetch params技术按查询字符串条件过滤列表:
var Account = Backbone.Model.extend({
initialize: function() {
this.datacenters = new Datacenters;
this.datacenters.url = "/api/account/" + this.id + '/datacenters';
}
});
然后来自帐户实例:
account.datacenters.fetch({data: {...}});
Backbone docs有关获取嵌套模型和集合的信息