在jquery函数范围内的类上的TypeScript调用方法 [英] TypeScript calling methods on class inside jquery function scope
本文介绍了在jquery函数范围内的类上的TypeScript调用方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下TypeScript类。
I have the below TypeScript class.
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");
}
}
生成的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
文档中看到过我可以这样做:
I have seen in the TypeScript
documentation that I can do this:
public Get() : void {
$.get("/api/brand", () => function(items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
结果如下: _this
现在是对 BrandViewModel
实例的引用,但jquery this
> .each 函数未按照我的预期更改为 _this
:
Which results in the below, where _this
is now a reference to the BrandViewModel
instance but the this
inside the jquery .each
function is not changed to _this
as I might expect:
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", (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");
};
这篇关于在jquery函数范围内的类上的TypeScript调用方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文