我正在尝试将我的应用程序移动到使用“outlet”的新Emberjs路由器组件。
请参阅参考:http://emberjs.com/guides/outlets/并且: http://codebrief.com/2012/07/anatomy-of-an-ember-dot-js-app-part-i-redux-routing-and-outlets/
我如何理解这一点: 使用字符串连接插座时,会发生以下情况
---一直工作到最后一步。我似乎无法在控制器上设置视图属性。
JSBin:http://jsbin.com/ekekir/40/edit
相关代码:
App.Router
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
state1: Ember.Route.extend({
route: '/state1',
connectOutlets: function (router) {
router.get('applicationController').connectOutlet('state1')
}
})
})
});
控制器和视图
App.State1View = Ember.View.extend ({
templateName: 'state1',
submit: function () {
this.get('controller').doLogView();
return false;
}
});
App.State1Controller = Ember.Controller.extend({
doLogView: function () {
console.log('Getting controller view:');
console.log(this.get('view'));
}
});
最后它返回一个大胖子。
我做错了什么,或者这是应该的样子?
BTW:这是使用ember-1.0.pre。
答案 0 :(得分:3)
Mike Aski是正确的,控制器不应该知道视图。
但是,当前实现确实在控制器上设置视图,而不是您期望的控制器。在上面的示例中,view
的{{1}}属性将设置为applicationController
的实例。
来自Ember来源的相关代码:
https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/system/controller.js#L140
答案 1 :(得分:2)
这是一种正常行为,因为控制器不必知道呈现其内容的视图。你会有一个依赖循环(和一个破碎的设计......)。
依赖关系遵循链:V - > C - >中号
此外,控制器注入一次,每次显示时都会创建视图。