ember-data中的多态关系

时间:2013-11-26 03:41:55

标签: ember.js ember-data

我有三种模式:公司任务。一家公司有很多人。一个人有一家公司。公司有很多任务。一个人有很多任务。

任务关系是多态的。

以下是我的模特

App.Taskable = DS.Model.extend({

    tasks: DS.hasMany('task')
});

App.Task = DS.Model.extend({

    subject: DS.attr('string'),

    taskable: DS.belongsTo('taskable', { polymorphic: true})
});

App.Person = App.Taskable.extend({

  firstName: DS.attr('string'),

  lastName: DS.attr('string'),

  email: DS.attr('string'),

  company: DS.belongsTo('company'),

  fullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName')

});

App.Company = App.Taskable.extend({

    name: DS.attr('string'),

    people: DS.hasMany('person')
});

请注意公司扩展可执行。我相信我已正确定义了这些关系。我不知道如何延迟加载任务。

这是我的观点

  <script type="text/x-handlebars" data-template-name='show/_person'>
    <div>
    <form class="form-horizontal" role="form">
      <div class="form-group">
        <label class="col-sm-2 control-label">Name</label>
        <div class="col-sm-10">
          <p class="form-control-static">{{fullName}}</p>
        </div>
      </div>
      <div class="form-group">
        <label class="col-sm-2 control-label">Company</label>
        <div class="col-sm-10">
          <p class="form-control-static">{{company.name}}</p>
        </div>
      </div>
      <div class="form-group">
        <label class="col-sm-2 control-label">Tasks</label>
        <div class="col-sm-10">
          <p class="form-control-static">
          {{#each task in tasks}}
            {{task.subject}}<br />
          {{/each}}
          </p>
        </div>
      </div>
    </script>

为与该人员相关联的公司发出GET请求,但不会请求任务。我如何获得与个人或公司相关的任务?我希望向people/3/tasks或类似的

提出GET请求

1 个答案:

答案 0 :(得分:4)

我认为只有ActiveModelAdapter已经实现了多态关联。

要使其正常工作,您需要使用以下格式:

GET /tasks

{
    tasks: [
        {
            id: 1,
            subject: 'Mytask1',
            // in the polymorphic association we need to say the type and the id
            taskable: { type: "person", id: 1 }
        },
        {
            id: 2,
            subject: 'Mytask2',
            taskable: { type: "company", id: 1 }
        }
    ]
}

GET /tasks/1

{
    task: {
        id: 1,
        subject: 'Mytask1',
        // in the polymorphic association we need to say the type and the id
        taskable: { type: "person", id: 1 }
    }
}

我用小提琴更新你的样本请看看http://jsfiddle.net/marciojunior/7k7RT/