EmberJS命名约定:{path:“/:object_id”}

时间:2013-11-08 05:03:48

标签: ember.js nested-routes

我对Ember很新。

我在嵌套路由中遇到此动态网址功能时遇到问题。

我一般都了解嵌套路线,如:

App.Router.map(function(), {
  this.resource('orders', function(){
    this.route('order', { path: "/orders/:order_id" })
  })
})

我知道将{{ outlet }}置于orders模板中以显示嵌套的order对象。

但我的问题是,order_id的命名约定如何与我的模型数据相关?

如果我的订单数据是:

{
  id: 1,
  name: "John Doe",
  address: "123 example rd",
  telephone: "5145555555"
}

这是:order_id与rails类似,因为它将对象名称“:order_”添加到“id”的JSON属性中吗?

我很确定是这种情况,但我不确定在访问路径时我还缺少什么来显示特定对象:"/orders/1"

某处可能是Ember.ObjectController,但我无法弄明白。

2 个答案:

答案 0 :(得分:0)

order_id必须是将在过渡和linkTo中使用的对象的属性。

{{linkTo 'orders.order' obj}}

在上述情况下,您的路线obj.object_id应该解决。所以你有两个选择:

(1)将动态细分设置为:id

path: "/orders/:id"

或(2)向您的模型添加order_id。如果您使用的是ember-data,则可以轻松创建别名属性:

order_id: Ember.computed.alias('id'),

答案 1 :(得分:0)

您的动态slug应该与记录上的标识符匹配,或者您应该覆盖路由上的序列化程序,以便在尝试生成URL时为ember提供必要的信息。

http://emberjs.jsbin.com/AvOYIwE/2/edit

App.OrderRoute = Ember.Route.extend({
  model: function(params) {
   this.get('store').find('order', params.order_id);
  },
  serialize: function(model){
   //if your model doesn't have a property that matches the slug you must override the serialize method
   return {order_id: model.get('id')}; 
  }
});