Feliz: Fügen Sie die KeyboardEvent-Güte hinzu, um sich leicht an Tastendruckereignisse zu binden

Erstellt am 2. Nov. 2019  ·  6Kommentare  ·  Quelle: Zaid-Ajaj/Feliz

Ich dachte daran, eine nette Möglichkeit zum Binden an Tastaturereignisse hinzuzufügen. Etwas wie das Folgende wäre wirklich großartig:

Szenario 1: Bindung an ein einzelnes Schlüsselereignis (häufigster Anwendungsfall)

Html.input [
    prop.onKeyUp(key.enter, fun _ -> dispatch Login)
    prop.onChange (UsernameChanged >> dispatch)
    prop.valueOrDefault state.Username
]

Szenario 2.1: An mehrere Schlüssel binden

Html.input [
    prop.onKeyUp [ key.enter, fun _ -> dispatch Login ]
    prop.onChange (UsernameChanged >> dispatch)
    prop.valueOrDefault state.Username
]

Szenario 2.2: An mehrere Schlüssel binden

Html.input [
    prop.onKeyUp(dispatch, [ key.enter, Login; key.esc, Reset ])
    prop.onChange (UsernameChanged >> dispatch)
    prop.valueOrDefault state.Username
]

Das ist zu ergattern! PRs sind sehr willkommen, lassen Sie es mich und andere Mitwirkende wissen, wenn Sie es versuchen möchten

Feliz good first issue help wanted

Alle 6 Kommentare

Ooh, schön, ich mag, wie du denkst!

IMHO Key liest sich besser als Keys , dh Key.Enter vs. Keys.Enter .

@cmeeren Du hast Recht, um es konsistent zu halten, haben wir für die Module prop , style und key (Kleinbuchstaben) ein Singular verwendet, wäre eine natürliche Ergänzung 👍

Ja, obwohl mir aufgefallen ist, dass wir colors und jetzt fonts ... Etwas, das man in Betracht ziehen sollte, sich zu ändern. :)

@cmeeren Ein Problem mit colors und fonts bei #95 gemacht

Verfeinerung des Vorschlags

Szenario 2.2 stimmt nicht mit dem Rest der Event-Handler überein, weil es bedeutet, dass wir auch onClick(dispatch, Login) implementieren sollten und höchstwahrscheinlich nicht (Feedback und Diskussion sind natürlich willkommen).

Wie bei Szenario 1 und Szenario 2 sollten die Ereignishandler dort KeyboardEvent als Argument für das Lambda (neben dem Schlüssel) akzeptieren. dh die Tastaturereignisse nehmen die Überladungen an:

KeyboardEvent -> unit // default
IKeyboardKey * (KeyboardEvent -> unit) // scenario 1
(IKeyboardKey * (KeyboardEvent -> unit)) list // scenario 2

Sieht gut für mich aus. Der Beweis liegt jedoch im Pudding. Mal sehen, wie es sich im Gebrauch anfühlt. :)

Tastaturgüte hinzugefügt:

// Enter only
prop.onKeyUp (key.enter, fun _ -> dispatch Login)
// Enter + CTRL
prop.onKeyUp (key.ctrl(key.enter), fun _ -> dispatch Login)
// Enter + SHIFT
prop.onKeyUp (key.shift(key.enter), fun _ -> dispatch Login)
// Enter + CTRL + SHIFT
prop.onKeyUp (key.ctrlAndShift(key.enter), fun _ -> dispatch Login)
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen