访问Controller中的模型属性 - Ember

时间:2017-05-23 07:09:24

标签: ember.js model controller ember-data

所以,我试图在控制器中访问我的模型属性。

控制器

dashobards: [
{ id: 12, name: 'test' },
{ id: 17, name: 'test2' },
];

路线中,我的模型名为信息中心

return Ember.RSVP.hash({
dashboards: this.store.findAll('dashboard'),
}).then((hash) => {
  return Ember.RSVP.hash({
    dashboards: hash.dashboards
  });
}, self);

我想在这样的控制器中得到结果:

dashboards: [
{ id: 12, name: 'test' },
{ id: 17, name: 'test2' },
{ id: 17, name: 'test1' },
{ id: 20, name: 'test20' },
];

在控制器中,我试图像这样访问这个模型:

this.dashborads = this.get(model.dashobards)

它没有用,有没有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

另一个更新如何访问我们从ember数据模型attibute中的服务器获取的复杂对象,

Created twiddle演示

使用DS.attr(),

定义属性
export default Model.extend({
  permissions:DS.attr()
});

路线档案,

model(){
    return this.store.findAll('dashboard');
  }

您的服务器响应应该是,

data: [{
        type: 'dashboard',
        id: 1,
        attributes: {
          permissions: {'name':'role1','desc':'description'}          
        }
      }]

hbs文件,

{{#each model as |row| }}
 Name: {{row.permissions.name}} <br/>
 Desc: {{row.permissions.desc}} <br />
{{/each}}

更新: 我仍然不确定这个要求,你的旋风应该是最小化的工作旋风以便更好地理解。但是我会提供我的观察,

1

model(params) {
    this.set('id', params.userID);
    const self = this;
    return Ember.RSVP.hash({
        dashboards: this.store.findAll('dashboard'),
        user: this.store.findRecord('user', params.userID)
    }).then((hash) => {
        return Ember.RSVP.hash({
            user: hash.user,
            dashboards: hash.dashboards
        });
    }, self);
}

上面的代码可以简单地写成

model(params) {
    this.set('id', params.userID);
    return Ember.RSVP.hash({
        dashboards: this.store.findAll('dashboard'),
        user: this.store.findRecord('user', params.userID)
    });
}
  1. 总是在init方法中初始化数组属性。参考https://guides.emberjs.com/v2.13.0/object-model/classes-and-instances/

  2. 要从数组中删除条目, this.dashboard.pushObject({ 'identifier': '', 'role': '' });尝试此this.get('dashboard').pushObject({ 'identifier': '', 'role': '' });

  3. 如果可能而不是普通对象,您可以使用Ember.Object之类的

    this.get('dashboard').pushObject(Ember.Object.create({ 'identifier': '', 'role': '' }));
    
    1. 删除条目。
    2.     removeDashboard(i) {
              let dashboard = Ember.get(this, 'dashboard');
              Ember.set(this, 'dashboard', dashboard.removeObject(dashboard[i]));
          }
      

      上面的代码可以写成,因为i是一个索引

      removeDashboard(i) {
          this.get('dashboard').removeAt(i)
      }
      

      只需在路由模型挂钩中执行return this.store.findAll('dashboard');,不要覆盖setupController挂钩,然后在hbs中,您应该能够访问代表RecordArray的model。您可以查看this answer了解如何使用此功能。