嗨,非常感谢你对这个问题的宝贵帮助。
由于我在EmberJS的世界里很新,问题可能来自我而不是Ember,但我找不到正确的解决方法。
我有一个名为a的模板,一个名为AAView的视图(及其模板)和两个控制器AAController和BController。
使用部分方法呈现模板'a':
{{partial'a'}}
AAController是AAView的控制器,连接到AAOutlet,它位于'a'模板中
this.render('aa', {
outlet: 'AAOutlet',
into: 'application'
});
在这个AAView中,我有一个观察者,应该观察AAController的 isShown 属性。
App.AAView = Ember.View.extend({
visibilityDidChanged: function() {
console.log('Visibility just changed man! Do something!');
}.observes('controller.isShown')
});
这个 isShown 变量在AAController然后......
App.AAController = Ember.ObjectController.extend({
isShown: false
});
此变量在另一个控制器(BController)中设置:
App.BController = Ember.ObjectController.extend({
needs: ['AA'],
myVal: '',
myValDidChanged:function() {
//Conditions and a lot of interesting stuffs
this.get('controllers.AA').set('isShown', true);
}.observes('myVal')
});
当我的脚本执行并且到达此代码时,视图未通知关于控制器中的更改...
如果我在 this.get('controllers.AA')。set('isShown',true); 行停止调试,似乎 this.get('控制器。 AA')返回另一个(或新的?)控制器,而不是视图使用和观察的控制器。
因此问题出在哪里?如何在BController中检索正确的控制器来编辑值并在视图中触发观察者?
--> Here is a jsFiddle with a simplified version of the problem.
非常感谢你对这个的帮助!
答案 0 :(得分:1)
来自https://github.com/emberjs/ember.js/issues/3404
的xpost@Gerfaut这里有几点困惑。
其中使用“AAController”作为名称 - 这会导致一些严重的误导。当您使用以下内容渲染到插座时
this.render('aa', ...
AaController
将被解决,而不是AAController
。同样适用于AAView
,它根本没有连接到UI。 AaView
代替了。
请查看:http://jsfiddle.net/x6emd/3/,它可以使用正确的命名方案解决您的问题。
我建议使用:
window.App = Ember.Application.create({
LOG_TRANSITIONS: true, // basic logging of successful transitions
LOG_VIEW_LOOKUPS: true,
LOG_ACTIVE_GENERATION: true
});
帮助您调试命名问题。
答案 1 :(得分:0)
当控制器由Ember实例化时,会为它们分配一个以小写字母开头的名称。这与Ember命名约定一致。试试this.get('controllers.a')。