如何为backbone.js定义嵌套资源?

时间:2011-07-27 00:36:22

标签: ruby-on-rails-3 routes backbone.js

所以我有一个包含嵌套资源的Rails 3.1应用:

resources :projects do
  resources :todos do
    resources :tasks
  end
end

我定义了backbone.js模型,如:

var Task = Backbone.Model.extend({url:'/projects/1/todos/20/tasks'})

我现在可以简单地创建一个新的嵌套任务:

task.set({description:"This is backbone.js created task!!!"})
task.save()

这非常棒。

但请注意,我对project/:project_id/todos/:todo_id/tasks网址进行了硬编码。 当然,我可以动态地生成它,但我想知道是否有更好的方法。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:5)

Backbone.Model.extend用于创建子类,而不是对象,因此创建一个带有静态URL的新类,然后实例化它似乎是一种特别繁琐的方法。

对于这样的问题,我非常喜欢Backbone Relational,它允许你在Backbone中定义一组并行结构作为类,并让Project对象上传自己的所有关联的ToDoTask个对象。您只需将Project作为RESTful“粗略文档”发送给客户端并从客户端接收。有关REST的讨论,请参阅The Richardson Maturity Model,因为backbone完全支持此特定模型。

另一种方法是SOAPly将更改消息作为更新发送,但这需要对Backbone的内部同步方法进行一些黑客攻击和理解。