【问题标题】:Variable controller in ember.jsember.js 中的变量控制器
【发布时间】:2014-04-10 22:08:37
【问题描述】:

我对使用 Ember.js 很陌生,这让我非常困惑。在ember.js中路由时有没有办法使用变量控制器?

我会试着解释一下:

我有一个模型列表,需要由不同的控制器控制并由不同的模板表示。例如:如果我有路由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"
        });
    }
});

此处的余烬指南:http://emberjs.com/guides/routing/rendering-a-template/ 显示使用带有控制器选项的this.render,但是当我传入任何内容(甚至是"ItemController")时,我收到此错误:

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

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    您应该使用控制器名称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"
            });
        }
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 2013-02-26
        • 2018-06-20
        相关资源
        最近更新 更多