从控制器获取另一个控制器的实例变量值的新方法是什么。
例如,在我之前使用之前我正在使用
App.router.get("applicationController.isLoopingEnabled")
访问该值,App.router.set("applicationController.isLoopingEnabled")
设置我isLoopingEnabled
实例中PlaybarController
变量的值。
我只是想知道现在Ember RC3的最佳做法是什么。我在从预版本升级时遇到了很多问题。
答案 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')