0

モデルを含む Backbone on Rails アプリがtask_listありprojectます。タスク リストには、project_idそれが属するプロジェクトを参照する列があります。

Rails では、タスク リストのルートを次のように設定しました。

POST    /projects/:project_id/task_lists   task_lists#create  
PUT     /task_lists/:id(.:format)          task_lists#update  
DELETE  /task_lists/:id(.:format)          task_lists#destroy

タスク リストの作成時に、バックボーンで行っていることは、タスク リストをインスタンス化し、task_lists#createRails でルートの URL を設定して、それをサーバーに保存することです。

taskList = new App.Models.TaskLists(data);  
taskList.url = "/projects/" + current_project_id + "/task_lists";  
taskList.save();

タスク リストを更新または削除する必要がある場合は、上記と同じことを行いますが、URL が に設定されているだけです"task_lists/" + this.id

models/taskList.jsタスク リストを CRUD する必要があるたびに URL を指定せずに、Backbone でファイルをセットアップするにはどうすればよいですか? カスタム関数を使用する必要があることはわかっていますurl: function () {...}が、バックボーンはデータを Rails サーバーに戻すmodel.url代わりに使用しているようです。model.url()

4

2 に答える 2

0

Model.url()関数http://backbonejs.org/docs/backbone.html#section-65であるため、@ redconservatory の回答から展開します。

initialize: function(attrs, options){
    // pass in the actual project model instead
    this.project = options.project;
},
url: function () {
    // keep the backbone default stuffs so specifying urlRoot will still work
    var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();
    // you only need project url when the object is new so this is enough
    if (this.isNew()) return project.url + base;
    return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id);
}
于 2013-09-19T23:37:00.993 に答える