Ember.js覆盖的控制器不引用原始模型

Ember.js overridden controller doesn't reference the original model?

本文关键字:引用 原始 模型 控制器 js 覆盖 Ember      更新时间:2023-09-26

我有一个Ember.js路由,其中renderTemplate允许由模型设置控制器/模板。我能够让新的控制器起作用,但是当调用继承的方法时,它会抛出关于没有对路由中应该由model方法提供的模型的引用的错误。下面是路径:

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方法返回的模型的引用。

有什么是我错过或不理解的吗?

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

我相信通过重写setupController钩子,您将能够实现所需的行为:

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

我不是100%确定它是否会工作,控制器必须在某个地方实例化,以便由模型提供。但是我想你已经注意到了。