Javascript jquery函数作用域内类上的TypeScript调用方法
我有下面的TypeScript类Javascript jquery函数作用域内类上的TypeScript调用方法,javascript,jquery,scope,typescript,Javascript,Jquery,Scope,Typescript,我有下面的TypeScript类 export class BrandViewModel { private _items = ko.observableArray(); public Add(id: number, name: string, active: boolean) : void { this._items.push(new BrandItem(this, id, name, active)); }
export class BrandViewModel {
private _items = ko.observableArray();
public Add(id: number, name: string, active: boolean) : void {
this._items.push(new BrandItem(this, id, name, active));
}
public Get() : void {
$.get("/api/brand", function(items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
}
Get
方法的结果javascript是:
BrandViewModel.prototype.Get = function () {
$.get("/api/brand", function (items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
};
我在TypeScript
文档中看到我可以这样做:
public Get() : void {
$.get("/api/brand", () => function(items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
public Get() : void {
$.get("/api/brand", (items) => {
$.each(items, (i, item) => {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
其结果如下所示,其中\u this
现在是对BrandViewModel
实例的引用,但jquery中的this
。每个函数并没有像我预期的那样更改为\u this
:
BrandViewModel.prototype.Get = function () {
var _this = this;
$.get("/api/brand", function () {
return function (items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
};
}, "json");
};
相反,我在TypeScript
中完成了以下操作:
public Get(): void {
var _this = this;
$.get("/api/brand", function(items) {
$.each(items, function (i, item) {
_this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
这给了我想要的结果:
BrandViewModel.prototype.Get = function () {
var _this = this;
$.get("/api/brand", function (items) {
$.each(items, function (i, item) {
_this.Add(item.Id, item.Name, item.Active);
});
}, "json");
};
有人知道更合适的方法吗?您可以这样做:
public Get() : void {
$.get("/api/brand", () => function(items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
public Get() : void {
$.get("/api/brand", (items) => {
$.each(items, (i, item) => {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
由此产生:
BrandViewModel.prototype.Get = function () {
var _this = this;
$.get("/api/brand", function (items) {
$.each(items, function (i, item) {
_this.Add(item.Id, item.Name, item.Active);
});
}, "json");
};
与一致,当使用=>时,TypeScript会在词汇上绑定它。非常好,谢谢。有没有可能解释一下它是如何工作的?i、 e.知道将\u this
放在这两个函数之外吗?这是在使用胖箭头符号时生成的,即()=>{}@basarat,我想问的是胖箭头符号被使用了两次并嵌套了。。\u如何将此
放在正确的位置。@昂贵的typescript将在胖箭头链的顶部生成它。如果中间有一个函数()
,那么链就会断开。你能帮我介绍一下我的演示吗?我不知道为什么它不能运行