以下代码位于“视图”内,并且“范围”存在问题
打字稿:
getInvitations() {
var invitationsUri = "/Api/Invitations/";
$.ajax({
url: invitationsUri ,
type: 'GET',
dataType: 'json',
contentType: 'application/json'
})
.done((result) => {
$.each(result, (index, item) => {
var invitation = new Invitation();
invitation.InvitationId(item.InvitationId);
invitation.Invited(true);
invitation.Email(item.Email);
this.Business.Invitations.push(invitation);
});
})
.fail((x, y, z) => {
alert(x + '\n' + y + '\n' + z + ' - failed to get invitations');
});
}
getUsers() {
var usersUri = "/Api/Users/";
$.ajax({
url: usersUri,
type: 'GET',
dataType: 'json',
contentType: 'application/json'
})
.done((result) => {
$.each(result, (index, item) => {
var user = new User();
user.Id(item.Id);
user.UserName(item.UserName);
user.Email(item.Email);
this.Business.Users.push(user);
});
})
.fail((x, y, z) => {
alert(x + '\n' + y + '\n' + z + ' - failed to get users');
});
}
第一种方法运作良好,第二种方法认为“这”指的是“项目”,因此它不认为“商业”是一种财产,因此没有实现目标。
任何想法可能会发生在这里?
编辑: 这是生成的代码(jscript)
BusinessView.prototype.getInvitations = function () {
var _this = this;
var invitationsUri = "/Api/Invitations/";
$.ajax({
url: invitationsUri,
type: 'GET',
dataType: 'json',
contentType: 'application/json'
}).done(function (result) {
$.each(result, function (index, item) {
var invitation = new Invitation();
invitation.InvitationId(item.InvitationId);
invitation.Invited(true);
invitation.Email(item.Email);
_this.Business.Invitations.push(invitation);
});
}).fail(function (x, y, z) {
alert(x + '\n' + y + '\n' + z + ' - failed to get invitations');
});
};
BusinessView.prototype.getUsers = function () {
var _this = this;
var usersUri = "/Api/Users/";
$.ajax({
url: usersUri,
type: 'GET',
dataType: 'json',
contentType: 'application/json'
}).done(function (result) {
$.each(result, function (index, item) {
var user = new User();
user.Id(item.Id);
user.UserName(item.UserName);
user.Email(item.Email);
_this.Business.Users.push(user);
});
}).fail(function (x, y, z) {
alert(x + '\n' + y + '\n' + z + ' - failed to get users');
});
};
答案 0 :(得分:0)
在jQuery .each()
回调中,this
始终由jQuery设置,因此它不会成为this
在更高级别范围内的内容。如果您需要从更高级别的范围访问this
的值,那么通常的解决方法是将其保存到该更高级别范围的本地变量,然后您可以从{ {1}}回调函数。
从您回答中包含的代码段中,您不清楚要访问的.each()
值。您可能还需要知道调用常规函数(如调用this
)会将getInvitations()
指针更改为指向全局对象,或者将严格模式更改为this
。 undefined
由javascript解释器根据函数调用的方式在每个函数调用中设置。
答案 1 :(得分:0)
你在每次调用中都得到了正确的lambda $.each(result, (index, item) => {
你应该对函数定义做同样的事情,以确保this
在getInvitations = () => {
和{getUsers = () => {
和{ {1}}