2014-01-23 70 views
3

我遇到了一個問題,這個問題導致我繞着圈轉,而且我想知道正確的解決方案。這很可能是我的頭腦中沒有點擊的根本性和顯而易見的事情,但正如我對Ember.js所知道的那樣,我會很感激你的時間。Ember.js中的全局變量與本地存儲

我想在ember.js中使用全局變量來存儲用戶名和用戶名。

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:

目前,我已通過添加變量,應用控制器做到了這一點。在應用程序模板,我可以通過顯示「名稱」變量{{名}} 。精細。 我也有一個'登錄'模板,如何從登錄模板訪問「名稱」變量? 我試過使用{{App.name}},但這不起作用? 我是否必須將應用程序控制器變量傳遞給登錄控制器,如果有,請從登錄路由器執行此操作嗎?

問題2:從登錄控制器設定的用戶ID,是它使用的情況下:

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

或我應該使用:

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

OR,我應該創建單獨的用戶控制器或用戶對象來存儲這些數據?

回答

2

你可以使用needs屬性來告訴你需要訪問另一個控制器,然後你可以創建一個別名屬性(實質上是創建對另一個屬性的引用)。

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

然後從登錄控制器,你可以做this.set('userId', 'fred');

+1

謝謝,我幾乎已經到了那裏,但我是用this.set(「用戶id」,'弗雷德)從一個Ajax調用和我內在調用之前需要將var self設置爲this,以便稍後使用它。 – tomyates