2013-05-14 150 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