Ember.js中的全局变量与本地存储

时间:2014-01-23 19:58:31

标签: ember.js

我遇到了一个让我围成一圈的问题,我想知道正确的解决方案。很可能一些基本而明显的东西没有点击我的脑袋,但正如我对Ember.js所知,我很感激你的时间。

我想在ember.js中使用全局变量来存储用户ID和名称。

目前,我已经通过向应用程序控制器添加变量来完成此任务:

App.ApplicationController = Ember.Controller.extend({
    //user name initially set to Tom
    name:'Tom',
    //using local storage - only works in modern browsers
    userID: localStorage['userID']
});

问题1:在应用程序模板中,我可以使用{{name}}显示“name”变量。精细。 我还有一个“登录”模板,如何从登录模板访问“name”变量? 我尝试过使用{{App.name}},但这不起作用? 我是否必须将应用程序控制器变量传递给登录控制器,如果是,请从登录路由器执行此操作吗?

问题2:要从登录控制器设置userID,是否使用:

this.controllerFor('application').set('userID','Fred');

或者我应该使用:

 Ember.set('App.userID','Fred');

或者,我应该创建一个单独的用户控制器还是用户对象来存储这些数据?

1 个答案:

答案 0 :(得分:2)

您可以使用needs属性告诉ember您需要访问另一个控制器,然后您可以创建一个别名属性(实质上是创建对另一个属性的引用)。

App.LoginController = Ember.Controller.extend({
    needs: ['application'],
    userId: Ember.computed.alias('controllers.applications.userId')
});

然后,您可以从登录控制器执行this.set('userId', 'fred');