我可以在没有模型的情况下转换到Ember.js应用程序中的路线吗?

时间:2014-02-10 09:37:46

标签: javascript ember.js routes

我正在Ember中实施日历应用程序。我的路由器设置方式如下:

App.Router.map(function() {
    this.resource('month', { path: '/month/:year/:month' });
});

现在我想要按钮导航到下个月或上个月。那时我没有加载下一个/上个月的模型,我只知道我想去哪个月和一年,所以我希望能够像这样过渡:

this.transitionTo('month', { year: 2014, month: 1 });

但是,Ember会希望我的参数成为模型,将跳过月份路径上的Route#模型钩子并直接将提供的对象设置为Route#setupController中的控制器。

我认为我的情况相当普遍,从我的谷歌搜索看起来它曾经被支持,但它对我来说不起作用。请提供建议,当我所知道的是所涉及的模型的ID并且无法访问实际的模型实例时,我可以如何转换到路径。

1 个答案:

答案 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);
    }     
  }
});