2013-09-28 9 views
30

Hallo, wenn ich tun, Web-Entwicklung gestartet, ich JavaScript Ereignisnamen realisiert alle ohne Trenn in Kleinbuchstaben waren, dh „MouseDown-“, „mouseup“ usw. Und bei der Arbeit mit die jQuery UI-Bibliothek, ich habe bemerkt, dass sie auch die gleiche Konvention verwenden; das heißt „dropdeactivate“ wie im folgenden BeispielJavaScript/DOM-Ereignisnamenskonvention

javascript $(".selector").on("dropdeactivate", function(event, ui) {})

Während dies auch für Namen arbeitet, die nur 2 oder 3 Worte sind, ist es wirklich schrecklich mit mehr Worten auf sie für Namen.

Trotzdem folgte ich dieser Konvention, wenn ich benutzerdefinierte (synthetische) Ereignisse abfeuern musste, die ich bis vor kurzem entwickelte, als ich entschied, dass es besser war, irgendeine Form von Separator zu verwenden. Jetzt verwende ich etwas wie "drop: deaktivieren" oder "app: ready".

auf iOS Apple hat kürzlich dieses Ereignis für den HTML-5-Airplay-API, und ich stimme mit dem Autor dieses Beitrags http://www.mobilexweb.com/blog/safari-ios7-html5-problems-apis-review, wenn er sagt:

Ich denke „webkitcurrentplaybacktargetiswirelesschanged“ den Rekord gewonnen hat: der längste JavaScript-Ereignisname überhaupt.

Was ist der Grund für diese seltsame Konvention? Warum verwenden Sie keine Form von Trennzeichen oder die camelCase-Konvention, um die Ereignisse besser lesbar zu machen?

Ich denke es gibt einen Grund dafür, viele kluge Leute haben daran gearbeitet ... Aber nach einer Weile frage ich mich immer noch warum?

Antwort

16

Leider ist es nicht so einfach, wenn Sie mit alten Konventionen umgehen. Und DOM Events haben viel Geschichte hinter sich.

Hier ist, wie type-Attribut von Event in DOM2 Events-Spezifikation definiert ist:

Schnittstelle Ereignis (eingeführt in DOM Level 2)
Typ (vom Typ DOMString, nur lesbar)

Der Name des Ereignisses (ohne Berücksichtigung der Groß- und Kleinschreibung). Der Name muss ein XML-Name sein.

Die Überlegung dahinter, nehme ich an, von diesem Absatz im gleichen doc erklärt.

In HTML 4.0 wurden Event-Listener als Attribut eines Element angegeben [...] Um Kompatibilität mit HTML 4.0 zu erreichen, können Implementierer die Einstellung von Attributen anzeigen, die das Ereignis Handler als Erstellung und Registrierung eines EventListener auf dem EventTarget darstellen.

Jetzt, während die Haltung in DOM3, ist der ursprüngliche Ansatz (wo Ereignisnamen case-sensitive sind) geändert hat, nehme ich an, ofter als die sicherste Wette sein - so wird man nicht auf User Agents abhängen müssen 'Korrektheit (siehe Beispiele this discussion und this funny issue).

Beachten Sie, dass W3C selbst eine ganze Reihe von camelcase Ereignisse in DOM2 (alle Mutation, DOMActivate, DOMFocusIn und DOMFocusOut) registriert hat.

+3

Sollten diese "PascalCased" genannt werden? – m59

5

Soweit ich sagen kann, gibt es keine offizielle Praxis in Bezug auf dieses Thema. Es scheint mir, dass, da camelCase der allgemein akzeptierte Standard für Namen in js ist, dasselbe auch für die Benennung von Ereignissen gilt. Wie Sie jedoch bemerkt haben, js selbst und viele Bibliotheken tun es anders. Ich habe beide Konventionen von großartigen Programmierern gesehen, also glaube ich, dass es einfach belanglos ist. Im Fall von "der längste JavaScript-Event-Name überhaupt", das ist ein großartiges Beispiel für ein Ereignis, das camelCase verwendet hätte, meiner Meinung nach ... oder vielleicht hätten sie es einfach gekürzt :)

Wenn Sie bleiben möchten zu dem, was Sie öfter gesehen haben, verwenden Sie Kleinbuchstaben. Wenn du denkst, das ist schwer für die Augen (tue ich), benutze camelCase. Ich würde wahrscheinlich nichts anderes verwenden, wenn Sie versuchen, einem Standard zu entsprechen.

1

Wenn es um Konventionen geht, ist es auf die eine oder andere Weise eine Gewohnheit, JavaScript-Frameworks scheinen der Konvention der JavaScript-DOM-Event-API zu folgen, ich weiß nicht, ob es einen Grund oder zumindest einen klaren gibt Nachdenken warum, aber es ist einfach so. für allgemeine Konventionen, crockford ist eine der besten Referenzen gibt es, aber es gibt keine Erwähnung für die Benennung von Ereignissen, aber zur gleichen Zeit here die Ereignisse scheinen ein wenig anders zu sein, die mich darüber nachdenken, als eine Frage der Wahl , nicht mehr und nicht weniger