Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 8c938699

Von Moritz Bunkus vor fast 8 Jahren hinzugefügt

  • ID 8c93869920ec0bf012a0f59175b39449c90a4d1f
  • Vorgänger 4cde51b9
  • Nachfolger 7a3ee8d6

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()

Unterschiede anzeigen:

js/kivi.js
313 313
    history.back();
314 314
  };
315 315

  
316
  // Call arbitrary jQuery functions on arbitrary objects with
317
  // arbitrary arguments. The use case is to allow eval_json_result
318
  // using code to call simple jQuery stuff without having it to wrap
319
  // them in their own small functions.
320
  // Example usage with ActionBar:
321
  //   call => [ 'kivi.call_jquery', '#form', 'resetForm' ],
322
  ns.call_jquery = function(this_arg, function_name) {
323
    var func = jQuery.fn[function_name];
324
    if (!func)
325
      return;
326

  
327
    var args = Array.from(arguments);
328
    args.splice(0, 2);
329

  
330
    return func.apply($(this_arg), args);
331
  };
332

  
316 333
  // Return a function object by its name (a string). Works both with
317 334
  // global functions (e.g. "check_right_date_format") and those in
318 335
  // namespaces (e.g. "kivi.t8").

Auch abrufbar als: Unified diff