2

我正在开发一个 Ember 应用程序,它真的很棒。但是我有一个烦人的问题,我无法解决。我在我的应用程序中使用路由,并在两个不同的控制器中使用它们自己的视图。如果我尝试使用从第一个控制器到第二个控制器的绑定属性,则该属性不会反映在第二个视图中。简而言之,我有这样的事情:

router = Em.Router.extend({.....});
App = Em.Application.create({
    Router: router,
    FirstCtrl: Em.Controller.extend({x:'ABC'}),
    FirstView: Em.View.extend({...}),   
    SecondCtrl: Em.Controller.extend({xBinding:'Em.App.router.firstCtrl.x', y:'123'}),
    SecondView: Em.View.extend({...}),
});
App.initialize();
Em.App = App;

如果在第二个视图的模板中我有这样的东西:

Binding property: {{x}}
Property with no binding: {{y}}

视图中未显示“ABC”,但“123”没有此类问题。

在我的浏览器中,我可以使用 Em.App.router.firstCtrl.x 从 Javascript 控制台访问该属性,但 Em.App.router.secondCtrl.x 返回未定义。所以,我的问题是为什么我不能访问该属性?我应该如何编写该绑定?

在此先感谢您的帮助

4

1 回答 1

2

我认为Em在绑定开始时不需要,试试这个..

SecondCtrl: Em.Controller.extend({xBinding:'App.router.firstCtrl.x', y:'123'}),

总结一下评论:

  • controllersember 中定义的所有在路由时都必须以Controller结尾,例如如果你调用router.get('applicationController').connectOutlets('home')它对应的控制器应该是App.HomeController或者App.homeController

  • 而绑定使用'App.router.yourController.yourProperty'而不是'Em.App.router.yourController.yourProperty'

  • connectControllers如果您想避免全局绑定,我们还可以按顺序使用跨控制器访问属性
  • 于 2012-09-27T08:15:25.033 回答