在 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 数据模型属性中从服务器获取的复杂对象,
使用 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)
});
}
最好总是在 init 方法中初始化数组属性。参考 https://guides.emberjs.com/v2.13.0/object-model/classes-and-instances/
为了从数组中删除条目,
this.dashboard.pushObject({ 'identifier': '', 'role': '' });
试试这个 this.get('dashboard').pushObject({ 'identifier': '', 'role': '' });
.
如果可能,您可以使用 Ember.Object 而不是普通对象,例如
this.get('dashboard').pushObject(Ember.Object.create({ 'identifier': '', 'role': '' }));
- 用于删除条目。
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
。您可以查看 了解如何使用它。
所以,我正在尝试访问控制器中的模型属性。
控制器:
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 数据模型属性中从服务器获取的复杂对象,
使用 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)
});
}
最好总是在 init 方法中初始化数组属性。参考 https://guides.emberjs.com/v2.13.0/object-model/classes-and-instances/
为了从数组中删除条目,
this.dashboard.pushObject({ 'identifier': '', 'role': '' });
试试这个this.get('dashboard').pushObject({ 'identifier': '', 'role': '' });
.
如果可能,您可以使用 Ember.Object 而不是普通对象,例如
this.get('dashboard').pushObject(Ember.Object.create({ 'identifier': '', 'role': '' }));
- 用于删除条目。
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
。您可以查看