我在前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
});
})
但这不起作用,视图也不会根据这些设置进行更新。
我做错了什么?我的哪些假设是错误的?
答案 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
本身完成,就像我们上面所做的那样。