我正在Ember中实施日历应用程序。我的路由器设置方式如下:
App.Router.map(function() {
this.resource('month', { path: '/month/:year/:month' });
});
现在我想要按钮导航到下个月或上个月。那时我没有加载下一个/上个月的模型,我只知道我想去哪个月和一年,所以我希望能够像这样过渡:
this.transitionTo('month', { year: 2014, month: 1 });
但是,Ember会希望我的参数成为模型,将跳过月份路径上的Route#模型钩子并直接将提供的对象设置为Route#setupController中的控制器。
我认为我的情况相当普遍,从我的谷歌搜索看起来它曾经被支持,但它对我来说不起作用。请提供建议,当我所知道的是所涉及的模型的ID并且无法访问实际的模型实例时,我可以如何转换到路径。
答案 0 :(得分:2)
由于您的路线是复合键,因此您必须发送一个对象。 Ember认为物体是路线的模型。如果您只是发送一个非对象,或者id
Ember会点击模型钩子并按照您的期望进行操作。
所以你将不得不在setupController中处理它,这是一般的想法
this.transitionTo('month', { year: 2014, month: 1, needsGetting: true });
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
},
setupControler: function(controller, model){
if(Em.get(model, needsGetting)){
// model = get the model
}
this._super(controller, model);
}
});
正如我在评论中提到的,你也可以使用模型钩子
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
},
setupControler: function(controller, model){
if(Em.get(model, needsGetting)){
//model = this.model(model);
// model = get the model
}
this._super(controller, model);
}
});
或者您可以获取下一个模型
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
},
actions : {
previous: function(){
},
next: function(){
var model = this.get('currentModel');
//figure out next hash
var nextModel = this.model(nextModelParams);
this.transitionTo('month', nextModel);
}
}
});