kivi.call_jquery: Funktion zum Aufrufen beliebiger jQuery-Funktionen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 13 Jan 2017 12:53:34 +0000 (13:53 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 13 Jan 2017 13:14:36 +0000 (14:14 +0100)
commit8c93869920ec0bf012a0f59175b39449c90a4d1f
tree309f87f56dacf83cffda86e8d4b08d25b3b23cf9
parent4cde51b98c34657c2540f08fb55b5ed28c314d06
kivi.call_jquery: Funktion zum Aufrufen beliebiger jQuery-Funktionen

An vielen Stellen schicken wir vom Backend aus nur die Namen
aufzurufender JavaScript-Funktionen an den Browser. Der sucht dann die
auszuführende Funktion mittels »kivi.get_function_by_name« aus dem
Namensraum heraus und führt sie anschließend mit »func.apply(…)« aus.

Leider ist es damit nicht so einfach möglich, jQuery-Funktionen
auszuführen, da diese als »this«-Argument ein jQuery-fiziertes Objekt
erwarten. Außerdem geht ein »namespace("jQuery.fn.resetForm")« schlicht
nicht bzw. tut nicht das, was man erwartet.

Daher die Funktion »kivi.call_jquery«. Ihr übergibt man:

1. einen jQuery-Selektor, der das »this«-Argument der aufzurufenden
   Funktion repräsentiert,
2. den Namen der aufzurufenden Funktion und
3. optional weitere Argumente.

Würde man z.B. einen Wert in einem Input setzen wollen, so sähe der
Aufruf in der Console so aus:

  kivi.call_jquery('#some_input_field', 'val', '42')

Das ist äquivalent zo

  $('#some_input_field').val('42')

Interessant wird die Verwendung an Stellen, wo nur Funktionsnamen
übergeben werden dürfen, z.B. bei »call«-Actions bei der ActionBar. Hier
sähe z.B. eine Action zum Zurücksetzen einer Form wie folgt aus:

  action => [
    t8('Reset'),
    call => [ 'kivi.call_jquery', '#form', 'resetForm' ],
  ],

Beim Anklicken wird dann letztlich das Äquivalent hierzu ausgeführt:

  $('#form').resetForm()
js/kivi.js