为什么我的内容绑定无法在RC上工作

时间:2013-02-17 03:07:28

标签: ember.js

我在前2中有以下代码

router.get('contentWithToolbarController').connectOutlet('toolbar', 'toolbar', {
    x1ButtonsVisible: true,
    x2ButtonsVisible: true,
    x3ButtonsVisible: true,
    x4ButtonsVisible: true
});

正确绑定'toolbarController'内容,模板/视图将反映此数据..

现在我想通过在setupController中设置toolbarController的内容来尝试RC中的类似内容,所以我有

setupController: function(controller, model) {
    var toolbarController = this.controllerFor('toolbar');
        toolbarController.set('content', {
            x1ButtonsVisible: true,
            x2ButtonsVisible: true,
            x3ButtonsVisible: true,
            x4ButtonsVisible: true
        });
})

但这不起作用,视图也不会根据这些设置进行更新。

我做错了什么?我的哪些假设是错误的?

1 个答案:

答案 0 :(得分:1)

不再有this.controllerFor

我们看到setupController这是App.ToolbarRoute吗?如果是这样,您可以从函数的参数中设置controller实例上的内容。

如果不是,那么您需要使用needs来设置其他控制器:

<强>路由器

每次我们进入此路线时,指示控制器在控制器上调用setupToolbar方法。

App.IndexRoute = Ember.Route.extend({
    setupController: function(controller) {
        controller.setupToolbar();
    }
});

<强>控制器

needs告诉IndexController它需要什么,setupToolbar实际设置你的工具栏。这就是设置与IndexController相关的另一个控制器的责任所在。

App.IndexController = Ember.Controller.extend({
    needs: ['toolbar'],
    setupToolbar: function() {
        var toolbarController = this.get('controllers.toolbar');
        toolbarController.set('content', {
            x1ButtonsVisible: true,
            x2ButtonsVisible: true,
            x3ButtonsVisible: true,
            x4ButtonsVisible: true
        });

        // Is it true?
        console.log(toolbarController.get('content.x1ButtonsVisible'));
    }
});

小提琴:http://jsfiddle.net/pBUK7/

此更改的原因是IndexRoute应该负责设置其他非IndexController的控制器。如果您确实需要此功能,则应该在IndexController本身完成,就像我们上面所做的那样。