2014-05-14 149 views
0

我有一个Ember.js路径,其中renderTemplate允许控制器/模板由模型设置。我可以让新的控制器运行,但是当调用继承的方法时,会抛出关于没有引用路由中应该由model方法提供的模型的错误。这里是路线:Ember.js重写控制器没有引用原始模型?

App.ActivityRoute = App.GameScreenRoute.extend({ 
    model: function(params) { 
     var lessons = App.getLessons(), 
      lessonId = params.lesson_id, 
      activityId = params.activity_id, 
      lesson = lessons[lessonId], 
      activity = lesson ? lesson.activities[activityId] : null; 

     if(activity) { 
      return activity.load(); 
     } 
     else { 
      return Promise.reject(); 
     } 
    }, 

    renderTemplate: function(controller, model) { 
     this.render(model.get("template") || "activity", { 
      controller: model.get("controller") || "activity" 
     }); 
    } 
}); 

model.controller === undefined,所使用的控制器是ActivityController,它的由model方法返回的模式提供,但如果我设置model.controller到另一个控制器,不同的控制器不具有参考到由model方法返回的模型。

有什么我失踪或不理解?任何帮助将不胜感激。

回答

1

这是因为为ActivityRoute调用的默认setupController挂钩只为ActivityController设置模型。

我相信通过重写setupController钩,你将能够达到要求的行为:

setupController: function(controller, model) { 
    this.controllerFor(model.get("controller") || "activity").set('model', model); 
} 

我不是100%肯定,如果它会工作,控制器必须被实例化的地方要由提供模型。但是我想你已经考虑到了这一点。

+0

谢谢。这工作很好。 – SimpleJ

相关问题