0

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

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

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

4

1 回答 1

0

不再有“一种方法”可以访问不同控制器的属性。这取决于您想从哪里访问它。

从另一个控制器访问一个控制器:

使用控制器的needs依赖

例子:

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')
于 2013-05-01T17:42:04.813 回答