我已經在軌道定義了以下路線:骨幹和Rails嵌套路線
resources :accounts do
resources :transactions
end
這導致像URL:
/accounts/123/transactions/1
有一種簡單的方法來此映射到骨幹模型集合向上?
我已經在軌道定義了以下路線:骨幹和Rails嵌套路線
resources :accounts do
resources :transactions
end
這導致像URL:
/accounts/123/transactions/1
有一種簡單的方法來此映射到骨幹模型集合向上?
變成主幹很容易通過在mo中嵌套集合來支持del如下:
var Account = Backbone.Model.extend({
initialize: function() {
this.transactions = new TransactionsCollection;
this.transactions.url = '/account/' + this.id + '/transactions';
this.transactions.bind("reset", this.updateCounts);
},
});
這實現了我想要的。
你可以閱讀更多關於它在這裏:http://documentcloud.github.com/backbone/#FAQ-nested
只要定義模型或網址(如果你使用一個)您的收藏像這樣:
var MyModel = Backbone.Model.extend({
url: 'accounts/123/transactions'
});
或動態:
mymodel.url = 'accounts/' + accountId + '/transactions';
這些模型或集合,是全系車型按此方式配置現在將相應地生成它的後端URL。
詳細信息:
型號: http://documentcloud.github.com/backbone/#Model-url
收藏: http://documentcloud.github.com/backbone/#Collection-url
第一可能不會在它的工作將意味着所有的交易將屬於一個帳戶,這是情況並非如此。例如,如果可以將url定義爲「accounts /:account_id/transactions」,那就太好了。 我會調查第二個選項。 –
也可以重寫模型和集合的url()方法。更復雜的網址構建機制可以在那裏實現。 – ProTom
它可能不是一個簡單的方法,但我認爲最好的方法是使用URL並將其設置爲一個功能像這樣:
var Transaction = Backbone.Model.extend({
url: function(){
var url = 'accounts/"+this.account_id+"/transactions';
if (this.id !== undefined){
url += "/"+this.id
}
return url;
}
});
或者可能在coffeescript(因爲它是倒退一個+軌):
class Transaction extends Backbone.Model
url: ->
url = "accounts/#{@account_id}/transactions"
url += "/#{@id}" if @id != undefined
url
哦,你更喜歡這樣(能做到這一點肯定有更深層次的嵌套它的更好):
var url = ["accounts", this.account_id, "transactions"]
if (this.id !== undefined) url.push(this.id)
return url.join("/")
據我所知現在有骨幹URL工具,這對我來說並不足夠痛苦,所以我會在其他一些庫中搜索一個:)
骨幹並不直接支持嵌套的URL的創建。您必須使用函數來動態計算嵌套對象的結果url。例如:
var Account = Backbone.Model.extend({
initialize: function() {
this.transactions = new TransactionsCollection();
var self = this;
this.transactions.url = function() {return self.url + self.id + '/transactions';};
// etc
},
});
這適用於通過獲取調用從後端加載的現有模型。但是我剛剛創建的模型呢?當調用initialize方法時,在後端創建記錄的ajax調用還沒有完成,'this.id'字段是'undefined'。有關如何應對這個問題的任何想法? – Ernesto
處理剛剛創建的模型的url生成的一種方法是使url成爲函數而不是字符串。因此,上面的行可以改爲:'this.transactions.url = function(){return'/ account /'+ this.id +'/ transactions'};'' – stereoscott