In realtà si sarebbe meglio usare il tag @event
per documentare il tipo di evento corretto, come si integra con altri tag evento-correlati come @fires
e @listens
in un modo che non corrisponde a @typedef
. A seconda del livello di dettaglio che desideri, potresti persino assegnare uno spazio ai nomi. Ecco le basi: scriverò questo come se stessi usando jQuery, solo per rendere il codice un po 'più semplice.
Generalmente si desidera associare tipi di evento a qualche spazio dei nomi, classe, nome, ecc Dal momento che si sta cercando di documentare un tipo di evento nativo, l'utilizzo di "documento" potrebbe avere senso (o finestra, o globale, o nativo, o quello che vuoi)
/**
* @namespace document
*/
Se si volesse, si potrebbe anche ottenere più granulare e fare qualcosa di simile
/**
* @namespace root.events.mouse
*/
Ma per il bene di questa discussione, ci limiteremo a bastone con document
.
Gli eventi del mouse hanno molte proprietà, ma è necessario solo documentare quelli che ti interessano. Ecco un typedef generico chiamato che definisce alcune delle proprietà più usati quando si tratta di eventi jQuery:
/**
* @typedef {{
* target: element,
* which: number,
* pageX: number,
* pageY: number,
* clientX: number
* clientY: number
* }} mouseEventParams
*/
Ora abbiamo documentato che tipo di dati dovrebbe essere in un evento del mouse, in modo che possiamo definire evento diverso digita ora e assicurati che le loro proprietà siano documentate senza ripeterci troppo. Indica che l'evento fa parte dello spazio dei nomi appropriato dichiarando prima lo spazio dei nomi, quindi un '#', quindi il nome dell'evento.
/**
* Mousedown Event
* @event document#mousedown
* @type {mouseEventParams}
*/
/**
* Mouseup Event
* @event document#mouseup
* @type {mouseEventParams}
*/
Un modo alternativo per definire questi eventi e le loro proprietà, supponendo che non si preoccupano le stesse proprietà per ogni evento, sarebbe quello di fare qualcosa del genere:
/**
* Mousedown Event
* @event document#mousedown
* @type {object}
* @property {element} target
* @property {number} which
*/
/**
* Mouseup Event
* @event document#mouseup
* @type {object}
* @property {number} pageX
* @property {number} pageY
* @property {number} clientX
* @property {number} clientY
*/
Se si desidera per fare riferimento a un evento in un altro doclet, è necessario essere consapevoli che JSDoc mette automaticamente in primo piano la stringa event:
in ogni nome di evento, per fungere da tipo di spazio dei nomi solo per gli eventi. Ciò significa che è necessario includere tale "spazio dei nomi" quando si fa riferimento all'evento da altri doclet, tranne nel caso di @fires
e @listens
, poiché è implicito lo spazio dei nomi event:
.
// Notice the inclusion of 'event:' between '#' and 'mousedown' on `@param`
// But you don't need it on 'listens'
/**
* Handles mousedown events
* @param {document#event:mousedown} event
* @listens document#mousedown
*/
var someMouseHandler = function (event) {
console.log("mousedown event: ", e);
}
// Again, you don't need to include 'event:' for the `@fires` tag
/**
* Triggers a mouseUp event
* @param {element} element
* @fires document#mouseup
*/
var triggerMouseUp = function (element) {
$(element).trigger('mouseup');
}
Impressionante, cercavo questa spiegazione per AGES. Molte grazie! – sidneys