我對EmberJS 2.0非常新,並試圖通過構建自己的網站來慢慢理解它。無論如何,我已經設法將Firebase與Ember集成,並且我的控制器能夠正確進行身份驗證。不過,我想知道爲什麼當我執行:訪問Ember控制器屬性在同一個控制器內
this.send('toggleModal');
的身份驗證action屬性函數內(。那麼()),這是行不通的,但如果我之外執行它,然後一切工作正常。
1)'this'關鍵字與Ember控制器以外的東西混淆了嗎?
下面是示例:
// /app/controllers/application.js
import Ember from 'ember';
export default Ember.Controller.extend({
isShowingModal: false,
actions: {
toggleModal: function() {
this.toggleProperty('isShowingModal');
},
authenticate: function(username, pass) {
this.get('session').open('firebase', {
provider: "password",
email: username,
password: pass
}).then(function (data) {
console.log(data.currentUser);
console.log(session.isAuthenticated); //Why is 'session' not defined?
this.send('toggleModal'); //This doesn't work. Throws an error.
});
this.send('toggleModal'); //This works.
},
logOut: function() {
this.get('session').close();
}
}
});
2)另外,我注意到,使用餘燼當我能夠使用屬性「session.isAuthenticated」但是內模板application.hbs,不該't'session'是一個注入所有使用Torii的路由和控制器的對象?爲什麼該屬性在application.js控制器中不可訪問/未定義?我使用https://www.firebase.com/docs/web/libraries/ember/guide.html#section-authentication作爲參考。
3)在上面的指南中,認證動作放在路由中。但是,根據這個quora post,路由只能處理模板渲染和模型接口。這篇文章不正確嗎?身份驗證邏輯應該駐留在application.js控制器中是否正確? https://www.quora.com/What-is-the-best-way-to-learn-Ember-js
此外,你應該讓'session'this.get('session');'在頂部並在稍後引用'session',這將解決你的'undefined'(因爲你從來沒有定義過它)。 – max