与ember-data的单向关系

时间:2014-12-25 22:51:51

标签: ember.js ember-data

我正在努力为员工建立一个简单的平台,让他们互相反馈。我正在使用ember-data(来自beta分支)。

模型

App.Employee = DS.Model.extend({
    name: DS.attr()
})

App.Feedback = DS.Model.extend({
    text: DS.attr(),
    employee: DS.belongsTo('employee', {async: true})
})

路由器(简称):

App.Router.map(function(){
    this.resource('profile', {path: 'profile/profile_id'})
})

App.ProfileRoute = Ember.Route.extend({
     model: function(params){
        return this.store.find('employee', params.profile_id);
     }
})

数据

App.Employee.reopenClass({
  FIXTURES: [
    { id: 1, name: 'Trek'},
    { id: 2, name: 'Tom'}
  ]
});

App.Feedback.reopenClass({
  FIXTURES: [
    { id: 1, text: 'Topic1', employee: 1},
    { id: 2, text: 'Topic2', employee: 2},
    { id: 3, text: 'Topic3', employee: 1},
    { id: 4, text: 'Topic4', employee: 2}
  ]
});

我无法获得要在模板profile中显示的反馈列表。

模板

{{#each feedback in model.feedback}}
    {{feedback.text}}
{{/each}}

我无法弄明白,我做错了什么。

我应该在feedbacks: DS.hasMany('feedback')下指定App.Employee吗?或者我应该通过控制器这样做吗?

1 个答案:

答案 0 :(得分:1)

  1. 路由器描述中存在拼写错误(&39; profile_id'之前错过冒号):

    App.Router.map(function() {
        this.resource('profile', {path: 'profile/:profile_id'})
    })
    
  2. 是的,您必须描述员工和反馈模型之间的一对多关系,如果您想要访问'反馈'员工模型列表。

  3. <强>更新 如果要将反馈模型与Employee分离,可以将它们之间的关系从模型移动到控制器。

    看起来像是:

    App.ProfileController = Em.ObjectController.extend({
        feedbackList: function() {
            return this.store.find('feedback', { employee: this.get('model.id') });
        }.property('model.id')
    });
    

    在模板中使用该字段(feedbackList):

    {{#each feedback in feedbackList}}
        {{feedback.text}}
    {{/each}}