0

您好,非常感谢您在这个问题上提供的宝贵帮助。

由于我在 EmberJS 的世界中很新,问题可能来自我而不是 Ember,但我找不到正确的方法来解决它。

我有一个名为 a 的模板、一个名为 AAView 的视图(也有它的模板)和两个控制器 AAController 和 BController。

模板 'a' 使用部分方法呈现:

{{部分'a'}}

AAController 是 AAView 的控制器,连接到位于“a”模板中的 AAOutlet

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('controllers.AA')返回另一个(或新的?)控制器,而不是视图使用和观察的控制器。

因此问题出在哪里,如何在 BController 中检索正确的控制器来编辑值并触发视图中的观察者?

--> 这是一个带有简化版问题的 jsFiddle。

非常感谢您对此的帮助!

4

2 回答 2

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
});

帮助您调试命名问题。

于 2013-09-14T17:25:05.427 回答
0

当控制器被 Ember 实例化时,它们被分配一个以小写字母开头的名称。这与 Ember 命名约定一致。试试 this.get('controllers.a')。

于 2013-09-10T22:56:49.003 回答