0

我对 Ember 很陌生。

我在嵌套路由中遇到了这个动态 url 功能的问题。

我一般理解嵌套路线,例如:

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某个地方,但我无法弄清楚。

4

2 回答 2

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')}; 
  }
});
于 2013-11-08T05:53:25.727 回答
0

order_id 需要是将在转换和链接到中使用的对象的属性。

{{linkTo 'orders.order' obj}}

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

(1) 设置动态段为:id

path: "/orders/:id"

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

order_id: Ember.computed.alias('id'),
于 2013-11-08T05:31:46.640 回答