2014-10-28 75 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