2013-05-14 147 views
0

我试图找出一个集/模型系统,该系统能够处理给它是从问上下文获取 数据,例如:骨干子集合与资源

可用“根”资源:

/api/accounts 
/api/datacenters 
/api/networks 
/api/servers 
/api/volumes 

可用“子”资源:

/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 

然后,给定集合/型号系统,我将能够做这样的事情:

// 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

您可以传递选项以获取将被转换为查询字符串参数。

例如:

// get the first account 
var account = AccountCollection.fetch({data: {pagesize: 1, sort: "date_desc"}}); 

将转化:

/api/accounts?pagesize=1&sort=date_desc 

这是不是很流利的DSL,但它的表现力和有效的,因为它仅传输要求,而不是过滤后取的对象。

编辑:

您能延迟加载你的子集,并使用相同的取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上FETC hing嵌套模型和集合

+0

右键,当我在帐户上过滤时工作,但我希望能够做到: 'AccountCollection.fetch()。first()。get('instances') ' 这将使以下电话: '/ API/accounts' 然后 '/ API /帐号/:first_id/instances' 并给我回的情况。 – syntaqx 2013-05-14 02:22:10

+0

使用延迟加载方法更新了我的答案。您将需要在承诺或回调中处理路由器中的流量控制,但希望这将提供要点。 – 2013-05-14 11:33:57

+0

这是更接近,但我希望我可以做一些自动化类型的交易,我可以定义我的集合/模型类似于https://gist.github.com/anonymous/d0229026e5a3c08d7426,它会反过来了解如何连接每个集合/模型的'segment'并使之开心。 – syntaqx 2013-05-14 16:23:20