我想更好地瞭解this Firebase authenticator for Ember SimpleAuth:當你在Ember函數上綁定'this'會發生什麼?
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
login: function() {
this.get('session').authenticate('authenticator:firebase', {
'email': this.get('email'),
'password': this.get('password')
}).then(function() {
this.transitionToRoute('index');
}.bind(this));
},
logout: function() {
this.get('session').invalidate().then(function() {
this.transitionToRoute('login');
}.bind(this));
}
}
});
會有人請解釋什麼是「.bind(本)」在做什麼,綁定是如何工作的正是在這種特定情況下?
編輯:一點點思考和研究之後,這是我提出的東西可能會發生的解釋:
代碼的「那麼」部分沒有獲得的‘這種’原始上下文。 「.bind(this)」將「this」(在本例中爲當前控制器對象)的值設置爲「.then」函數內的「this」。
這可以通過以下事實來證明:如果「.bind(this)」部分被刪除,則代碼的「transitionTo」部分不起作用。
在另一方面,如果我們寫的代碼如下,我們並不需要使用 「.bind(本)」:
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
login: function() {
var _this = this;
this.get('session').authenticate('authenticator:firebase', {
'email': this.get('email'),
'password': this.get('password')
}).then(function() {
_this.transitionToRoute('index');
});
},
logout: function() {
var _this = this;
this.get('session').invalidate().then(function() {
_this.transitionToRoute('login');
});
}
}
});
的思考?
是的,你應該添加你的文章的底部作爲答案(這很好回答你自己的問題)。 – steveax