Ember.js - 如何在一个插座中拥有多个模型的多个区域

时间:2013-03-07 22:16:15

标签: ember.js

我试图让两个小部件出现在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));
     }
});

1 个答案:

答案 0 :(得分:2)

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

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

使用"needs" syntax,您可以访问其他控制器的其他控制器。请参阅UserDetailsController:

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

我理解如何使用的一件事是{{render}}帮助器:

{{render "user_details"}}

使用此功能,您可以在应用程序的任何位置呈现任意模板(“user_details”)+控制器(“UserDetailsController”),无论您处于哪个路线。 (我认为这就是ember.js人们在谈论“单身控制器”时的意思。)

结合所有这些,我希望你能更好地了解如何处理你的问题。