2014-10-28 25 views
2

我創建了一個Session對象:Ember.js:不能訪問注入對象

App.Session = Ember.Object.extend({ 
    user: null, 
    userID: '', 
}); 

我注入這個對象:

Ember.Application.initializer({ 
name: 'login', 
initialize: function (container, application) { 
    App.register('session:main', App.Session, { instantiate: false, singleton: true }); 
    // Add `session` object to route to check user 
    App.inject('route', 'session', 'session:main'); 
    // Add `session` object to controller to visualize in templates 
    App.inject('controller', 'session', 'session:main'); 

    App.register('firebase:main', App.Firebase); 
    // Add `session` object to route to check user 
    App.inject('route', 'firebase', 'firebase:main'); 
    // Add `session` object to controller to visualize in templates 
    App.inject('controller', 'firebase', 'firebase:main'); 
    } 
}); 

我想要的SessionuserID屬性設置的標識當前用戶如下:

Ember.Route.reopen({ 
    beforeModel: function (transition) { 
    var isAuth = false; 
    var user = ''; 
    var store = this.store; 
    var _this = this; 
    var firebase = new Firebase("https://dynamicslife.firebaseio.com"); 
    firebase.onAuth(function(authData) { 
     if (authData) { 
     isAuth = true; 
     _this.session.userID = authData.id; //THIS OPERATIONS IS NOT WORKING!!!!!! 
     } else { 
     isAuth = false; 
     } 
    }); 

    // These routes you do not need to be logged in to access. 
    var openRoutes = ['home','index','about','stories']; 
    var testMode = false; 
    if (testMode == false) { 
    if (openRoutes.indexOf(transition.targetName) === -1 && isAuth === false) { 
     console.log('Please login to access this information'); 
     this.transitionTo('stories'); 
    } 
    } 
} 
}); 

在代碼表達式中標識出通過://THIS OPERATIONS IS NOT WORKING!!!!!!authData.id包含正確的ID值。但_this.session.userID仍未定義。

我試圖用_this.session.set('userID', authData.id);代替_this.session.userID = authData.id;,但是這給了我同樣的錯誤。

我認爲也許Session對象不會被注入Ember.Route.reopen。如果是這種情況,我如何才能從Ember.Route.reopen訪問Session對象?

因爲session.userID是不確定的,我得到以下錯誤:

Error while processing route: statistics.index session is not defined ReferenceError: session is not defined 

當灰燼運行此:

App.StatisticsRoute = Ember.Route.extend({ 
    model: function() { 
    return this.store.find('user', session.userID); 
    }, 
}); 

回答

2

你告訴它不要實例App.Session,這意味着它的對象你想用,但它是class不是instance

App.register('session:main', App.Session.create(), { instantiate: false, singleton: true }); 

session存在於路由中的this中,而不是全局名稱空間上。

App.StatisticsRoute = Ember.Route.extend({ 
    model: function() { 
    return this.store.find('user', this.session.get('userID')); 
    }, 
}); 

,你絕對應該使用一個setter

_this.session.set('userID', authData.id); 
+0

謝謝!你的答案是正確的。問題是否可以:是'App.register('session:main',App.Session.create(),{instantiate:false,singleton:true});'相當於'App.register('session:main', App.Session,{singleton:true});'? – 2014-10-28 02:07:37

+0

事實上,它和App.register('session:main',App.Session)一樣;'因爲singleton:true是默認值;)但是我從不迴避在學習時明確定義的東西。 – Kingpin2k 2014-10-28 05:02:46

+0

謝謝。很有幫助。 – 2014-10-29 00:36:23