访问非嵌套路由中的子记录

时间:2014-06-27 21:56:17

标签: ember.js ember-data

如果我有一个“组织”,有很多“诊所”,在我的应用程序中,我不希望嵌套路线,但我想访问组织页面上的诊所和诊所页面上的组织,是否有我需要做些什么特别的事情?我使用rails作为后端,如果我从RestAdapter切换到ActiveModelAdapter并嵌入诊所ID它可以工作,但我想知道如何使用标准的Res​​tAdapter。

路由器:

App.Router.map ->
  @resource 'organizations', ->
  @resource 'organization', path: 'organization/:organization_id', ->

  @resource 'clinics', ->

组织模板:

<h1>{{name}}</h1>
<h2>Clinics</h2>
  {{#link-to 'clinics.new'}}New Clinic{{/link-to}}
<ul id="org-clinics">
  {{#each clinics}}
    <li>{{#link-to 'clinic' this}}{{name}}{{/link-to}}</li>
  {{else}}
    <strong>No clinics yet...</strong>
  {{/each}}
</ul>

组织模式:

App.Organization = DS.Model.extend
  name: DS.attr 'string'
  clinics: DS.hasMany 'clinic', async: true

诊所模板:

<h1>{{name}}</h1>
<strong>Organization: </strong>{{organization.name}}

诊所模型:

App.Clinic = DS.Model.extend
  name: DS.attr 'string'
  organization: DS.belongsTo 'organization'

1 个答案:

答案 0 :(得分:1)

取决于您希望如何进行,但您可以轻松地绑定控制器内容。例如:

App.OrganizationsController = Ember.ArrayController.extend({
  needs: ['clinics'],
  clinics: null,
  clinicsBinding, 'controllers.clinics.content',

  clinicsUpdated: function () {
    // Do something here because some record updated
  }.observes('clinics.@each.content') // Bind properties
});

App.ClinicsController = Ember.ArrayController.extend({
  needs: ['organizations'],
  organizations: null,
  organizationsBinding, 'controllers.organizations.content'
});

您也可以在模板中访问它们。例如,{{#each clinics}}

希望有所帮助!