Соглашение об именах EmberJS для: { path: /:object_id }

Я новичок в Эмбер.

У меня проблемы с этой функцией динамического 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_» к атрибуту JSON «id»?

Я почти уверен, что это так, но я не уверен, что еще мне не хватает для отображения определенного объекта при посещении пути: "/orders/1"

Возможно, где-то Ember.ObjectController, но я не могу понять.


person Reza Khadjavi    schedule 08.11.2013    source источник
comment
какой-нибудь из этих ответов сработал для вас?   -  person Amir T    schedule 29.05.2014


Ответы (2)


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'),
person Amir T    schedule 08.11.2013

Ваш динамический слаг должен либо совпадать с идентификатором в записи, либо вы должны переопределить сериализатор на маршруте, чтобы предоставить необходимую информацию для внедрения, когда он пытается сгенерировать ваш URL-адрес.

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')}; 
  }
});
person Kingpin2k    schedule 08.11.2013