在 Controller 中访问模型属性 - Ember

Accessing model properties in Controller - Ember

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

控制器:

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

route 我有一个名为 dashboards 的模型

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)

而且它不起作用,还有其他方法吗?

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

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}}

更新: 我仍然不确定这个要求,你的 twiddle 应该最小化工作 twiddle 以便更好地理解..无论如何我会提供我的观察,

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': '' });.

如果可能,您可以使用 Ember.Object 而不是普通对象,例如

this.get('dashboard').pushObject(Ember.Object.create({ 'identifier': '', 'role': '' }));
  1. 用于删除条目。
    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。您可以查看 了解如何使用它。