Puede que no sea una manera fácil, pero creo que la mejor manera es utilizar URL y ponerlo en una función como este:
var Transaction = Backbone.Model.extend({
url: function(){
var url = 'accounts/"+this.account_id+"/transactions';
if (this.id !== undefined){
url += "/"+this.id
}
return url;
}
});
O tal vez en coffeescript (como es backb uno + carriles):
class Transaction extends Backbone.Model
url: ->
url = "accounts/#{@account_id}/transactions"
url += "/#{@id}" if @id != undefined
url
Ah, y que podría hacerlo de la misma familia (seguramente con anidación más profundo es mejor):
var url = ["accounts", this.account_id, "transactions"]
if (this.id !== undefined) url.push(this.id)
return url.join("/")
yo sepa ahora hay utilidad de URL en la columna vertebral , y no es demasiado dolor para mí, así que buscaría uno en otra biblioteca :)
Esto funciona bien para los modelos existentes cargados desde el back-end a través de una llamada de recuperación. Pero, ¿qué pasa con un modelo que acabo de crear? Cuando se llama al método de inicialización, la llamada ajax que crea el registro en el back-end no ha terminado, y el campo 'this.id' está' 'undefined'. ¿Alguna idea sobre cómo lidiar con esto? – Ernesto
Una forma de manejar la generación de URL para los modelos que acabamos de crear es hacer que la url sea una función en lugar de una cadena. Por lo tanto, la línea anterior podría cambiarse a: 'this.transactions.url = function() {return '/ account /' + this.id + '/ transactions'};' – stereoscott