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

Ember.js:在hasMany关系中显示项目,ember.js,ember-data,ember-router,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 prod

鉴于这些模型:

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\u文档的响应

{"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"}}]}
我想我在路由中做错了什么我应该在哪里定义查询来查找该文档的所有行?但我不确定。在指南里找不到类似的东西


谢谢

按照惯例,中的默认代码将返回一个包含模型id的对象,但是属性名称不是id,而是模型名称和id的组合,在您的情况下,应该是transport\u document\u id

serialize方法返回的对象将作为参数传递给。这一点也在本文中进行了解释

您的路线应与以下类似:

App.TransportDocumentRoute = Ember.Route.extend
  model: (params)-> 
    App.TransportDocument.find(params.transport_document_id)
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
或者,您可以重写路由的序列化以提供不同的参数名称。 您可以找到serialize的不同实现的示例

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

App.TransportDocumentRoute = Ember.Route.extend
  model: (params)-> 
    App.TransportDocument.find(params.transport_document_id)
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%,很抱歉。我真的不会说咖啡:

-答案的第一部分:我确实有这样定义的路线。我确实有对象的详细信息,但不会触发任何查询。这是预期的吗?当我得到/index json时,它已经有了所有的属性——答案的第二部分:如何启动get?我会更好地解释:当我导航到transport_文档时,会有一个ajax调用正确返回我的所有redords。从那里,当我导航到“运输单据/1”时,不会执行任何查询。也许问题就在这里?我会提出一个问题,这是一个原子问题,可能对其他人有用,因为我在任何地方都找不到类似的问题。Modelfind激发了一个GET。至于这些问题,我需要看更多的代码来评论。我纠正了第一部分,正如你所说的:你是对的,现在一切都好了。关于第二部分:我想我在商店里有我的记录,你可以从回复中看到。也许我做得不对?