Backbone Sub-Collections&资源

时间:2013-05-14 02:05:08

标签: javascript ajax html5 rest backbone.js

我试图找出一个可以处理检索的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?)

您可以提供任何帮助,我们将不胜感激!

1 个答案:

答案 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有关获取嵌套模型和集合的信息