好的,所以这就是我想要完成的事情(在ember.js中):
currentUser.firstname
之类的事情(例如,在导航中)经过大量的研究,似乎建立一个单独的控制器/模型是最好的方法。我尝试在应用程序控制器中做所有事情,但后来我需要在该控制器上隐式设置用户模型(不知何故?),这似乎不是一个好主意(如果我需要在应用程序控制器中做其他事情怎么办? )。
所以这就是我尝试过的:
controllers / session.js
init: function() {
// this never gets called unless I call the setCurrentUser
// function from another controller using 'needs' or something
},
setCurrentUser: function() {
// you can ignore the authData.uid variable - it's something used
// by firebase, but not important for this example. Just assume I'm
// requesting and getting a user back.
this.store.find('user').then(function(users) {
this.set('currentUser', users.filterBy('uid', authData.uid)[0])
}
}
models / session.js
DS.Model.extend({
currentUser: DS.belongsTo('user')
});
我没有与此模型/控制器关联的路径或视图/模板,因为它实际上没有意义(用户不需要看到关于他/她自己的页面)。
所以我尝试通过做setCurrentUser
这样的事情从应用程序控制器调用this.get('setCurrentUser')()
(这看起来非常奇怪 - 必须有更好的方法,但我认为答案可能不是从应用程序控制器和以不同的方式初始化控制器?)。
我希望得到一些关于我如何能够实现这一目标的建议。很抱歉,我正在尝试同时开发和解释应用程序的架构,所以它有点乱 - 如果有任何不清楚的地方,请告诉我。
感谢您的帮助!