Próbuję wywołać metodę instancji klasy TypeScript (w projekcie ASP.NET MVC). Jednak w środowisku wykonawczym dostaję wyjątki, takie jak 0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'checkString'
.Funkcja klasy TypeScript niedostępna
Skopiowałem wygenerowany kod JavaScript w jsfiddle, gdzie metoda wydaje się działać.
Nie jestem facetem JavaScript, więc każda pomoc jest doceniana!
Czego próbowałem dotąd:
- różnych przeglądarek (Chrome:
Uncaught TypeError: undefined is not a function
, FF:TypeError: this.checkString is not a function
) - przeglądarka polana buforuje
- usuwanie tymczasowych plików IIS Express,
- czyszczenie i przebudowywanie rozwiązania
- nie używając prywatnego modyfikatora
- rozpoczęciem projektu na innym komputerze
- zastępującego underscore.js połączenia z manekina do verfiy że nie jest problem
- zaznaczone, że członkowie instancji są prawidłowo ustawione
Jest to kod maszynopis:
class FormData {
BlogName: string;
CacheTimeOut: number;
CopyrightHolder: string;
NavBarTitle: string;
MarkdownExtra: boolean;
MarkdownSanitize: boolean;
RatingActive: boolean;
HtmlEditor: boolean;
constructor(blogName: string, cacheTimeOut: number, copyrightHolder: string, navBarTitle: string, markdownExtra: boolean, markdownSanitize: boolean, ratingActive: boolean, htmlEditor: boolean) {
this.BlogName = blogName;
this.CacheTimeOut = cacheTimeOut;
this.CopyrightHolder = copyrightHolder;
this.NavBarTitle = navBarTitle;
this.MarkdownExtra = markdownExtra;
this.MarkdownSanitize = markdownSanitize;
this.RatingActive = ratingActive;
this.HtmlEditor = htmlEditor;
}
private checkString(value: string): boolean {
return _.isString(value) && value !== '';
}
validate(): boolean {
return (this.checkString(this.BlogName) && this.checkString(this.CopyrightHolder) && this.checkString(this.NavBarTitle) && _.isNumber(this.CacheTimeOut) && !_.isNull(this.MarkdownExtra) && !_.isNull(this.MarkdownSanitize) && !_.isNull(this.RatingActive));
}
}
//I'm calling the validate function like that (from within the same module)
var form = getFormData(); //returns a FormData instance
if (!form.validate()) {
//foo
}
I tu generowane JavaScript:
var FormData = (function() {
function FormData(blogName, cacheTimeOut, copyrightHolder, navBarTitle, markdownExtra, markdownSanitize, ratingActive, htmlEditor) {
this.BlogName = blogName;
this.CacheTimeOut = cacheTimeOut;
this.CopyrightHolder = copyrightHolder;
this.NavBarTitle = navBarTitle;
this.MarkdownExtra = markdownExtra;
this.MarkdownSanitize = markdownSanitize;
this.RatingActive = ratingActive;
this.HtmlEditor = htmlEditor;
}
FormData.prototype.checkString = function (value) {
return _.isString(value) && value !== '';
};
FormData.prototype.validate = function() {
return (this.checkString(this.BlogName) && this.checkString(this.CopyrightHolder) && this.checkString(this.NavBarTitle) && _.isNumber(this.CacheTimeOut) && !_.isNull(this.MarkdownExtra) && !_.isNull(this.MarkdownSanitize) && !_.isNull(this.RatingActive));
};
return FormData;
})();
Dziękuję, ja stoi ten sam problem podczas wywoływania funkcji jako Jquery Event. "To" odnosiło się do zdarzenia, a nie do klasy. Twoje rozwiązanie rozwiązało mój problem. Wciąż nie wyjaśnia, dlaczego tak się dzieje w Maszynopisie. Musi być inny sposób. – Manny
https://www.youtube.com/watch?v=tvocUcbCupA wyjaśnia, dlaczego tak się dzieje – basarat