javascript - 在 jQuery 函數作用域內調用類的方法(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));
}
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");
}
這會導致如下結果,其中 _this 現在是對 BrandViewModel 實例的引用,但 jquery .each 函數內的 this 並沒有像我預期的那樣變成 _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");
};
有人知道更合適的方法來做這件事嗎?
答案#1
你可以這樣做:
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");
};
