2016-05-09 13 views
2

JetBrains hat einen alten Blogbeitrag über JSDoc Annotationen, der erklärt, wie man die IDE der variablen Typen http://blog.jetbrains.com/webide/2012/10/validating-javascript-code-with-jsdoc-types-annotations/ informiert.Wie kann ich den Typ des "This" -Wertes für eine Schließung in JetBrains IDEs angeben?

Ich kann immer noch nicht scheinen, einen Weg zu finden, der IDE zu sagen, dass der "dieser" Wert in vielen jQuery-Rückrufen HTMLElements ist. Zum Beispiel:

/** 
* Enable input 
* @returns {SomeConstructor} 
*/ 
SomeConstructor.prototype.enableInput = function(){ 
    this.$markup.find('input').each(function(){ 
     this.disabled = false; 
    }); 
    return this; 
}; 

Das obige Beispiel wird immer noch eine Warnung in dem IDE produzieren - „Potenziell ungültige Verwendung dieses“.

enter image description here Wie kann ich angeben, dass "dies" auf ein HTMLElement-Objekt verweist?

EDIT:

Nach einem Blick durch die JSDoc Dokumentation fand ich die @this Anmerkung http://usejsdoc.org/tags-this.html. @this ermöglicht es Ihnen, einen "this" -Wert für eine ganze Funktion anzugeben, aber in dem veröffentlichten Beispiel wird die IDE denken, dass sie ein HTMLElement und nicht einen SomeConstructor zurückgibt.

+0

Sie verwenden also phpstorm oder webstorm? – Justinas

+0

Das beantwortet Ihre Frage nicht, aber ... die Signatur des Callbacks zu jQuerys Funktion ist effektiv 'Funktion (Ganzzahlindex, Elementelement)', wobei 'Element === dies 'ist, also könnten Sie vielleicht das deklarieren Argumente und kommentieren Sie den Typ des zweiten? –

+0

Verwenden von PHPStorm, aber die Frage gilt für beide. Ja, das ist ein Ansatz @BenGriffiths, aber es gilt auch für Dinge wie $ (Element) .on ('click', function() {// irgendein Code}) sowie: /. – Robert

Antwort

0

@ de1mar in den Kommentaren genagelt. Der Trick besteht darin,/** @ this {HTMLElement} kurz vor der Schließung zu platzieren. So zum Beispiel:

/** 
* Enable input 
* @returns {SomeConstructor} 
*/ 
SomeConstructor.prototype.enableInput = function(){ 
    this.$markup.find('input').each(/**@this {HTMLElement}*/function(){ 
     this.disabled = false; 
    }); 
    return this; 
}; 

Oder

SomeConstructor.prototype.listenForCheck = function(){ 
    this.$markup.find('input[type=checkbox]').on('click', /**@this {HTMLInputElement}*/ function(){ 
     //Do something 
    }); 
}; 

Sollten für jedermann nützlich sein, da draußen jQuery in einer jetbrains IDE zu schreiben. Danke @ del1mar!

Verwandte Themen