4

如文档中所述,控制器不应调用其关联视图的方法或更改属性,而是视图应绑定其关联控制器的状态。

有这个:

App.MyController = Ember.Controller.extend({
    myViewVisible:false,
    toggleViewVisibitity:function(){
        this.set('myViewVisible', !this.get('myViewVisible'));
    }
}
App.MyView = Ember.View.extend({
    isVisible:function(){
        return this.get('myViewVisible');
    }.observes('myViewVisible')
}

当我从另一个控制器调用 toggleViewVisibility 时,视图中没有任何反应。

我怎样才能使它正确?

提前致谢

4

1 回答 1

8

它应该以这种方式工作:

App.MyController = Ember.Controller.extend({
    myViewVisible:false,
    toggleViewVisibitity:function(){
        this.set('myViewVisible', !this.get('myViewVisible'));
    }
}
App.MyView = Ember.View.extend({
    isVisible:function(){
        return this.get('controller.myViewVisible');
    }.property('controller.myViewVisible'),
    // even shorter version of the above
    isVisible : Ember.computed.alias("controller.myViewVisible")
}

需要对您的代码进行更改:

  1. 我将 View 的 isVisible 属性从观察者更改为属性。每次被监视的属性更改时,观察者都会触发(= 函数执行)。所以这不是你需要的。但是您想将其定义为属性,以便 Ember 可以像这样访问它:view.get("isVisible")。因此我将其更改为属性。
  2. 我更改了您的属性的依赖键。控制器被分配给您在属性控制器上的视图。因此,您需要在所需的属性前面加上控制器才能访问它。
  3. 如您所见,在 Ember.computed.alias 的帮助下,我还提供了此逻辑的更短版本,但我想先向您展示更详细的解决方案。
于 2013-03-10T22:14:33.927 回答