从控制器获取另一个控制器的实例变量值的新官方方法是什么?

时间:2013-05-01 16:10:01

标签: ember.js

从控制器获取另一个控制器的实例变量值的新方法是什么。

例如,在我之前使用之前我正在使用 App.router.get("applicationController.isLoopingEnabled")访问该值,App.router.set("applicationController.isLoopingEnabled")设置我isLoopingEnabled实例中PlaybarController变量的值。

我只是想知道现在Ember RC3的最佳做法是什么。我在从预版本升级时遇到了很多问题。

1 个答案:

答案 0 :(得分:0)

不再有“单向”访问不同控制器的属性。这取决于你想从哪里访问它。

从其他控制器访问控制器:

使用Controller's needs depedency

示例:

App.PostsController = Em.ArrayController.extend({
  someValue: 1
});

App.CommentsController = Em.ArrayController.extend({
  needs: ['posts'],
  postsValuePlusOne: function() {
    return this.get('controllers.posts.someValue') + 1;
  }).property('controllers.posts.someValue')
});

从路线访问控制器:

App.PostsController = Em.ArrayController.extend({
  someValue: 1
});

App.CommentsRoute = Em.Route.extend({
  renderTemplate: function() {
    var someValue = this.controllerFor('posts').get('someValue');
  }
});

从视图访问控制器:

App.PostsController = Em.ArrayController.extend({
  someValue: 1
});

App.PostsView = Em.View.extend({
  someValueBinding: 'controller.someValue'
});

如果要访问视图控制器以外的控制器的值(例如CommentsController,请使用控制器的需求:controller.controllers.comments.someValue

最后,

有一种访问任何控制器的全局方法,但仅用于调试和测试,从不在生产中

var postsController = App.__container__.lookup('controller:posts')