简体   繁体   English

ember.js 中的变量控制器

[英]Variable controller in ember.js

I'm very new to using Ember.js, and this is confusing me greatly.我对使用 Ember.js 很陌生,这让我很困惑。 Is there a way to use a variable controller when routing in ember.js?在 ember.js 中路由时有没有办法使用变量控制器?

I'll try to explain a bit:我会试着解释一下:

I have a list of models that I need to be controlled by different controllers and represented by different templates.我有一个我需要由不同控制器控制并由不同模板表示的模型列表。 For example: If I have the route items/:item_id , and I want to do something like this:例如:如果我有路线items/:item_id ,我想做这样的事情:

App.ItemRoute = Ember.Route.extend({
    model: function(params) {
        return items[params.lesson_id]; // edit: should be item_id not lesson_id
    },

    setupController: function(controller, model) {
        controller.set("model", model);
    },

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

The ember guides here: http://emberjs.com/guides/routing/rendering-a-template/ show the use of this.render with a controller option, but when I pass in anything (even "ItemController" ), I receive this error:这里的 ember 指南: http : this.render显示this.render与控制器选项的使用,但是当我传入任何东西(甚至是"ItemController" )时,我收到这个错误:

Error while loading route: Error: You passed controller: 'ItemController' into the render method, but no such controller could be found.

Is there a better way to do this?有一个更好的方法吗?

You should be using the controller name, item , instead of ItemController and App.ItemController must be defined.您应该使用控制器名称item ,而不是ItemController并且必须定义App.ItemController

App.ItemRoute = Ember.Route.extend({
    model: function(params) {
        return items[params.lesson_id];
    },

    setupController: function(controller, model) {
        controller.set("model", model);
    },

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

使用this.controllerFor('item')为模板指定一个特定的控制器,您必须定义该控制器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM