Ember.js:显示hasMany关系中的项目

时间:2013-04-17 16:12:05

标签: ember.js ember-data ember-router

鉴于这些模型:

App.TransportDocument = DS.Model.extend
  number: DS.attr 'string'
  date: DS.attr 'string'
  printable_url: DS.attr 'string'
  transport_document_rows: DS.hasMany('App.TransportDocumentRow')

App.TransportDocumentRow = DS.Model.extend
  product_name: DS.attr 'string'
  quantity: DS.attr 'number'
  measure: DS.attr 'string'
  transport_document: DS.belongsTo('App.TransportDocument')

这是我的路线:

App.TransportDocumentsRoute = Ember.Route.extend
  model: -> App.TransportDocument.find()

App.TransportDocumentRoute = Ember.Route.extend
  model: (params)-> App.TransportDocument.find(params.transport_document_id)

App.TransportDocumentRowRoute = Ember.Route.extend
  model: -> App.TransportDocumentRow.find()

我有一个把手模板:

{{#each transport_document in controller}}
  td_id: {{transport_document.id}}
  {{#each transport_document_row in transport_document.transport_document_rows}}
    row_id: {{id}}
  {{/each}}
{{/each}}

我希望我的结果是:

td_id: 1 row_id: 1 row_id: 2 row_id: 3
td_id: 2 row_id: 3 row_id: 4 row_id: 5
td_id: 3 row_id: 8 row_id: 7 row_id: 6

但是:

td_id: 1 row_id: row_id: row_id:
td_id: 2 row_id: row_id: row_id:
td_id: 3 row_id: row_id: row_id:

这是我对/ transport_documents的服务器响应

{"transport_documents":
  [
    {"id":1,"number":"11","date":"17/04/2013","cause":"Conto lavorazione","transport_document_row_ids":[3,2,1],"transport_document_rows":    
      [
        {"transport_document_row":{"id":3,"transport_document_id":1,"product_name":"suola puzzle verde","quantity":"1","measure":"pz","}},
        {"transport_document_row":{"id":2,"transport_document_id":1,"product_name":"lacci rossi","quantity":"2","measure":"pz"}},
        {"transport_document_row":{"id":1,"transport_document_id":1,"product_name":"Rotolo di tela","quantity":"50","measure":"m"}}
      ]},
    {"id":2,"number":"2","date":"18/04/2013","cause":"Conto lavorazione","transport_document_row_ids":[6,5,4],"transport_document_rows":
      [
        {"transport_document_row":{"id":6,"transport_document_id":2,"product_name":"suola puzzle verde","quantity":"1","measure":"pz"}},
        {"transport_document_row":{"id":5,"transport_document_id":2,"product_name":"lacci rossi","quantity":"2","measure":"pz"}},
        {"transport_document_row":{"id":4,"transport_document_id":2,"product_name":"Rotolo di tela","quantity":"50","measure":"m",}}
      ]},
    {"id":3,"number":"3","date":"19/04/2013","cause":"Conto lavorazione","transport_document_row_ids":[9,8,7],"transport_document_rows":
      [
        {"transport_document_row":{"id":9,"transport_document_id":3,"product_name":"suola puzzle verde","quantity":"1","measure":"pz"}},
        {"transport_document_row":{"id":8,"transport_document_id":3,"product_name":"lacci rossi","quantity":"2","measure":"pz"}},
        {"transport_document_row":{"id":7,"transport_document_id":3,"product_name":"Rotolo di tela","quantity":"50","measure":"m"}}]}

我想我在路线上做错了什么(我在哪里定义查询以查找THAT文件的所有行?)但我不确定。在指南中找不到类似的东西

谢谢

1 个答案:

答案 0 :(得分:0)

按照惯例,Route#serialize中的默认代码将返回包含模型ID的对象,但属性名称不是id,而是模型名称和id的组合,其中你的情况应该是transport_document_id

serialize方法返回的对象将作为参数传递给Route#model。这也在routing guide中解释。

您的路线应与以下内容类似:

App.TransportDocumentRoute = Ember.Route.extend
  model: (params)-> 
    App.TransportDocument.find(params.transport_document_id)

或者您可以覆盖路线的serialize以提供不同的参数名称。 您可以找到序列化here的不同实现的示例。


对于查询,您可以按以下方式进行过滤:

App.TransportDocumentRowRoute = Ember.Route.extend
  model: (params) -> App.store.filter App.TransportDocumentRow, (row) ->
    # might have to implement Route#serialize to also provide the 
    # transport_document_id property in this route
    row.get 'transport_document_id' == params.transport_document_id

但是,这只会过滤您存储的记录。如果尚未提取行记录,则还必须触发GET才能获取它们。

顺便说一句,抱歉,如果语法不是100%。我真的不会说咖啡。)