2

我试图让 2 个小部件出现在 ember.js 应用程序的多个路由中。我已经设置了以下作为演示,http://jsfiddle.net/adice/EyDcy/5/

您会看到我已经找到了一种方法,方法是将以下内容添加到路由中:

App.IndexRoute = Em.Route.extend({
    setupController: function(controller,model) {
       this._super(controller,model);
       controller.set('user',App.UsersStore.find(2));
       controller.set('site',App.SiteData.find(1));
     }
});

但是,如果我想让它适用于每条路线,我真的必须手动将它添加到我制作的所有路线中吗?我试图将它添加到 ApplicationRoute,但一直返回错误。

还有一种填充id的方法吗?我想做

App.appData = Em.Object.create({
    currentUserId: 2
});

App.IndexRoute = Em.Route.extend({
    setupController: function(controller,model) {
       this._super(controller,model);
       controller.set('user',App.UsersStore.find(App.appData.currentUserId));
       controller.set('site',App.SiteData.find(1));
     }
});
4

1 回答 1

2

由于您想在每条路由中访问该用户对象,因此您不必依赖路由器,但可能可以将用户对象视为您希望从应用程序中的任何位置访问的全局变量。有几个地方可以存储这些对象。在你的 jsfiddle 的这个更新版本中,我把它放在了 ApplicationController 的“currentUser”属性中:

App.ApplicationController = Ember.Controller.extend({
  init: function() {
    this.set('currentUser', App.UsersStore.find(2))
  }
});

使用“需要”语法,您可以从其他控制器访问其他控制器。查看 UserDetailsController:

App.UserDetailsController = Ember.ObjectController.extend({
  needs: 'application',
  content: Ember.computed.alias('controllers.application.currentUser')
})

我刚刚了解如何使用的一件事是 {{render}} 助手:

{{render "user_details"}}

有了这个,你可以在你的应用程序的任何地方渲染任意模板(“user_details”)+控制器(“UserDetailsController”),不管你在哪个路由。(我认为这就是 ember.js 人们在谈论“单例控制器”时的意思。)

结合所有这些,我希望您对如何解决问题有更好的了解。

于 2013-05-03T17:27:56.500 回答