Posiadam poniższą klasę TypeScript.Metody wywoływania TypeScript na klasie wewnątrz zakresu funkcji jquery
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");
}
}
Powstały JavaScript dla metody Get
jest:
BrandViewModel.prototype.Get = function() {
$.get("/api/brand", function (items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
};
Widziałem w dokumentacji TypeScript
że mogę to zrobić:
public Get() : void {
$.get("/api/brand",() => function(items) {
$.each(items, function (i, item) {
this.Add(item.Id, item.Name, item.Active);
});
}, "json");
}
co skutkuje poniżej, gdzie _this
jest teraz odniesieniem do instancji BrandViewModel
, ale this
wewnątrz jquery .each
funkcja nie jest zmieniany na _this
jak mógłbym się spodziewać:
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");
};
Zamiast zrobiłem poniżej w 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");
}
co daje mi wynik chciałem:
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");
};
Czy ktoś wie bardziej odpowiedni sposób to zrobić?
Czy możesz mi pomóc w sprawie mojego demo.Nie wiem, dlaczego nie może uruchomić https://stackoverflow.com/questions/46834032/uncaught-typeerror-this-delete-is-not-a-function – ziqi