我知道控制器现在已经在Ember中被弃用了,但是我想知道如何使用旧版本的ember来实现这一点。
我的路线定义如下:
Ember.Route.extend({
model : function(params) {
return Ember.RSVP.hash({
posts : store.find('post', {date : params.date, page : params.page})
});
},
setupController : function(controller, model) {
this.set('model', model.posts);
}
});
一切正常,数据加载。现在我决定从控制器动态加载数据。所以在相应的控制器中,我做了如下:
Ember.ArrayController.extend({
Ember.RSVP.hash({
posts : store.find('post', {date : params.date, page : params.page})
}).then(function(data) {
this.store.pushPayLoad(this.store.modelFor('post'), data);
}.bind(this));
});
以上述方式,我能够将数据加载到Ember Store中,但它没有加载到模型中。建议的方法是,只要数据在商店中可用,模型就会立即更新。
答案 0 :(得分:1)
只是为了澄清:你为什么要把东西搬到控制器?
似乎最简单的方法是摆脱所有的ArrayController代码,以及路由中的setupController方法,只需按如下方式设置模型:
Ember.Route.extend({
model : function(params) {
return this.store.find('post', {date : params.date, page : params.page});
}
});
这是Ember首选(并且预期)获取带有参数的模型的方式。
为了简化事情,假设您的参数格式如下:
{
date: SOME_DATE,
page: SOME_PAGE
}
然后你需要做的就是:
Ember.Route.extend({
model : function(params) {
return this.store.find('post', params);
}
});
这会找到包含给定参数的所有帖子,并将它们分配给模型,然后模板中的{{model}}
和控制器中的this.get('model');
可用。