Tôi đang cố gắng để hiểu rõ hơn this Firebase authenticator for Ember SimpleAuth:Điều gì sẽ xảy ra khi bạn liên kết 'this' với chức năng Ember?
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));
}
}
});
có ai đó hãy giải thích những gì ".bind (this)" đang làm và ràng buộc đang làm việc như thế nào một cách chính xác trong trường hợp đặc biệt này?
Edit: Sau khi một sự phản ánh ít và nghiên cứu, đây là lời giải thích đề xuất của tôi về những gì có thể xảy ra:
Các ".Sau đó" của mã không có quyền truy cập vào bối cảnh ban đầu của 'này'. ".bind (this)" đặt giá trị của "this" (trong trường hợp này là đối tượng điều khiển hiện tại) thành "this" bên trong hàm ".then".
Điều này có thể được chứng minh bằng thực tế là nếu phần ".bind (this)" bị xóa, phần "transitionTo" của mã không hoạt động.
Mặt khác, nếu chúng ta viết mã như sau, chúng tôi không cần phải sử dụng ".bind (this)":
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');
});
}
}
});
Suy nghĩ?
Đúng, bạn nên thêm phần cuối bài đăng của mình làm câu trả lời (bạn có thể trả lời câu hỏi của riêng mình). – steveax