Ember.js:迭代控制器上设置的多个模型
我想声明由我的控制器加载的两个模型 我没有使用Ember.js:迭代控制器上设置的多个模型,ember.js,ember-data,Ember.js,Ember Data,我想声明由我的控制器加载的两个模型 我没有使用模型、前模型或后模型挂钩,因为: 我不必实现加载路由/模板 我可以在页面中独立加载每个模型(如延迟加载) 我在路线中使用setupController挂钩,因此: setupController: function(controller, model) { var that = this; controller.set('model', { stations: that.store.find(
模型
、前模型
或后模型
挂钩,因为:
加载
路由/模板setupController: function(controller, model) {
var that = this;
controller.set('model', {
stations: that.store.find('station'),
packages: that.store.find('package'),
});
}
我的控制器是一个Ember.controller
为了在车把中遍历这些模型,我必须使用model.stations.content.content
,这让我觉得我做错了什么:
{{#each station in model.stations.content.content}}
// .....
{{/each}}
有没有更好的方法在控制器上设置这些模型,或者使用不同的控制器类型或其他东西?您可以更改模型以返回
Ember.RSVP.hash
,它将充当承诺包,并在hash的范围内用数据填充属性站
和包
,因此,当模型得到解析时,它会将该哈希模式设置为控制器中的模型:
[...]
model: function() {
return Em.RSVP.hash({
stations: this.store.find('station'),
packages: this.store.find('package')
});
}
[...]
setupController: function(controller, model){
controller.set('model', model);
this.stations().then(function(value){
controller.set('stations', value);
});
}
然后在模板中:
{{#each item in model.stations}}
<li>{{item.name}}</li>
{{/each}}
{{{#model.stations中的每个项}
{{item.name}
{{/每个}}
或
{{{#model.packages中的每个项}
{{item.name}
{{/每个}}
(请参阅)您可以将模型更改为返回
Ember.RSVP.hash
,它将像一个承诺包一样工作,并在哈希范围内用数据填充属性stations
和packages
,因此当模型得到解析时,它会将该哈希模式设置为控制器中的模型:
[...]
model: function() {
return Em.RSVP.hash({
stations: this.store.find('station'),
packages: this.store.find('package')
});
}
[...]
setupController: function(controller, model){
controller.set('model', model);
this.stations().then(function(value){
controller.set('stations', value);
});
}
然后在模板中:
{{#each item in model.stations}}
<li>{{item.name}}</li>
{{/each}}
{{{#model.stations中的每个项}
{{item.name}
{{/每个}}
或
{{{#model.packages中的每个项}
{{item.name}
{{/每个}}
(请参见)无需为模型创建新对象 您可以在控制器中执行以下操作:
[...]
model: function() {
return Em.RSVP.hash({
stations: this.store.find('station'),
packages: this.store.find('package')
});
}
[...]
setupController: function(controller, model){
controller.set('model', model);
this.stations().then(function(value){
controller.set('stations', value);
});
}
车站所在地:
stations: function() {
return this.store.find('station');
}
然后,您可以在模板中使用站点
,方法与使用模型相同。退房
但是一个控制器只应该装饰一个模型,你可以考虑创建嵌套的路由(它会给你嵌套的控制器)。< /P> < P>你不需要为你的模型创建一个新的对象。 您可以在控制器中执行以下操作:
[...]
model: function() {
return Em.RSVP.hash({
stations: this.store.find('station'),
packages: this.store.find('package')
});
}
[...]
setupController: function(controller, model){
controller.set('model', model);
this.stations().then(function(value){
controller.set('stations', value);
});
}
车站所在地:
stations: function() {
return this.store.find('station');
}
然后,您可以在模板中使用站点
,方法与使用模型相同。退房
但是一个控制器只应该装饰一个模型,你可以考虑创建嵌套的路由(它会给你嵌套的控制器)。如果你意识到如果你有一个大的模型或者你的Ajax请求需要很长的时间,那么
< P> @ MyKyWayJe的方法绝对是正确的方法。当模型加载时,用户界面将变为空白 @Chaosekie建议回答我的问题,那就是等待从商店加载模型的承诺实现,然后在控制器上设置属性 即在路线中
:
setupController: function(controller, model) {
this.store.find('station').then(function(stations) {
controller.set('stations',stations);
});
this.store.find('package').then(function(packages) {
controller.set('packages', packages);
});
}
这允许使用手柄中的“正常”方式对两个模型进行迭代:
{{#each package in packages}}
// ....
{{/each}}
{{#each station in stations}}
// ....
{{/each}}
@MilkyWayJoe的方法绝对是正确的方法,如果您意识到如果您有一个大型模型或AJAX请求需要很长时间,那么在加载模型时,您的UI将变为空白 @Chaosekie建议回答我的问题,那就是等待从商店加载模型的承诺实现,然后在控制器上设置属性 即在
路线中
:
setupController: function(controller, model) {
this.store.find('station').then(function(stations) {
controller.set('stations',stations);
});
this.store.find('package').then(function(packages) {
controller.set('packages', packages);
});
}
这允许使用手柄中的“正常”方式对两个模型进行迭代:
{{#each package in packages}}
// ....
{{/each}}
{{#each station in stations}}
// ....
{{/each}}
我以前做过这个,但是我的模型很大,这使得页面加载非常慢,这就是为什么我在问题中解释了为什么我没有使用
模型钩子,我以前做过这个,但是我的模型很大,这使得页面加载非常慢,这就是为什么我解释了为什么我没有在问题中使用模型
钩子的原因哇,谢谢你的例子和一切!我仍然在使用模型钩子时遇到同样的问题,如果加载需要一段时间,我将得到一个空白屏幕,或者必须实现一个加载模板。但是,您在控制器上设置模型之前将模型加载到存储中的方法成功了!哇,谢谢你的例子和一切!我仍然在使用模型钩子时遇到同样的问题,如果加载需要一段时间,我将得到一个空白屏幕,或者必须实现一个加载模板。但是,您在控制器上设置模型之前将模型加载到存储中的方法成功了!