我正在尝试让 2 个小部件出现在 ember.js 应用程序的多个路由中。我已将以下内容设置为演示,http://jsfiddle.net/adice/EyDcy/5/
您将看到我找到了一种通过将以下内容添加到 route 来实现此目的的方法:
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));
}
});
但是,如果我希望每条路线都可以使用此功能,我真的需要手动将其添加到我制作的所有 route 吗?我尝试将其添加到 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));
}
});
最佳答案
由于您希望在每个路由中访问该用户对象,因此您不必依赖路由器,但可能可以将用户对象视为您希望从应用程序中的任何位置访问的全局变量。 有几个地方可以存储这些对象。在 this updated version of your jsfiddle我已将其放入 ApplicationController 的“currentUser”属性中:
App.ApplicationController = Ember.Controller.extend({
init: function() {
this.set('currentUser', App.UsersStore.find(2))
}
});
使用"needs" syntax您可以从其他 Controller 访问其他 Controller 。请参阅 UserDetailsController:
App.UserDetailsController = Ember.ObjectController.extend({
needs: 'application',
content: Ember.computed.alias('controllers.application.currentUser')
})
我刚刚了解如何使用的一件事是 {{render}} 帮助器:
{{render "user_details"}}
有了这个,您可以在应用程序中的任何位置渲染任意模板(“user_details”)+ Controller (“UserDetailsController”),无论您位于哪条路线。 (我认为这就是 ember.js 人们在谈论“单例 Controller ”时的意思。)
结合所有这些,我希望您对如何解决您的问题有更好的想法。
关于Ember.js - 如何在一个导出中拥有多个区域和多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282831/