0Pricing
jQuery Academy · Lekcja

Integracja metod publicznych i callbacków

Proszę dodawać do wtyczek metody publiczne umożliwiające interakcję z zewnętrznym kodem oraz uwzględniać funkcje callback pozwalające użytkownikom reagować na określone zdarzenia wtyczek.

Integracja metod publicznych i callbacków to bezpłatna lekcja jQuery Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej jQuery Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs jQuery Academy zawiera 3 lekcji w sumie.

Interakcja z wtyczkami

Dobre wtyczki nie działają tylko samodzielnie. Umożliwiają użytkownikom interakcję także po inicjalizacji! W tej lekcji dowiedzą się Państwo, jak dodawać metody publiczne do zewnętrznego sterowania oraz funkcje callback do definiowania niestandardowych reakcji.

  • Metody publiczne: Funkcje, które użytkownicy mogą wywoływać na zainicjalizowanej instancji wtyczki.
  • Callbacki: Funkcje uruchamiane, gdy wewnątrz wtyczki wystąpią określone zdarzenia.

Powtórzenie podstaw wtyczek

Przypomnijmy, że wtyczki jQuery są często umieszczane w wyrażeniu IIFE (Immediately Invoked Function Expression), aby zapobiec zanieczyszczaniu zakresu globalnego. Taka struktura zapewnia bezpieczne miejsce na logikę wtyczki i jej wewnętrzne zmienne.

Rozbudujemy ten znany już Państwu wzorzec.

(function($) {
  $.fn.myPlugin = function(options) {
    // Default settings
    var settings = $.extend({}, $.fn.myPlugin.defaults, options);

    return this.each(function() {
      var $this = $(this); // The element the plugin is applied to
      // Plugin logic goes here
      console.log("Plugin initialized on: " + $this.attr('id'));
    });
  };

  // Default options
  $.fn.myPlugin.defaults = {
    message: "Hello from plugin!"
  };
})(jQuery);

// How to use (in HTML <div id="myElement"></div>):
// $('#myElement').myPlugin();

Czym są metody publiczne?

Metoda publiczna to funkcja udostępniana przez wtyczkę, którą można wywołać spoza jej wewnętrznego zakresu, nawet po zainicjowaniu wtyczki dla elementu.

Można myśleć o niej jak o pilocie do wtyczki. Można za jej pomocą zlecić wtyczce wykonanie czynności takich jak „resetowanie”, „aktualizowanie” lub „pobranie wartości”.

Implementowanie metody publicznej

Aby dodać metody publiczne, zwykle przechowuje się dane instancji wtyczki (w tym jej metody) bezpośrednio w elemencie DOM za pomocą metody jQuery .data().

Utwórzmy prostą wtyczkę „licznika” i dodajmy metodę getValue.

(function($) {
  $.fn.counterPlugin = function(options) {
    var settings = $.extend({
      initialValue: 0
    }, options);

    return this.each(function() {
      var $this = $(this);
      var value = settings.initialValue;

      var methods = {
        getValue: function() {
          return value;
        },
        increment: function() {
          value++;
          $this.text(value); // Update display
        },
        init: function() {
          $this.text(value); // Initial display
        }
      };

      // Store methods on the element's data
      $this.data('counterPlugin', methods);
      methods.init(); // Initialize display
    });
  };
})(jQuery);

// HTML: <div id="myCounter"></div>
// Usage: $('#myCounter').counterPlugin();
// Later: $('#myCounter').data('counterPlugin').getValue();

Wywoływanie metod publicznych

Po zainicjowaniu wtyczki i zapisaniu jej metod za pomocą .data() można uzyskać do nich bezpośredni dostęp i je wywoływać.

Najpierw należy pobrać zapisaną instancję z elementu, a następnie wywołać metodę na tej instancji.

// Assume counterPlugin from previous scene is loaded

// HTML: <div id="myCounter"></div>

$(document).ready(function() {
  // Initialize the plugin
  $('#myCounter').counterPlugin({ initialValue: 5 });

  // Get the plugin instance
  var counterInstance = $('#myCounter').data('counterPlugin');

  // Call public methods
  console.log("Current value: " + counterInstance.getValue());
  counterInstance.increment();
  console.log("After increment: " + counterInstance.getValue());
});

Czym są callbacki?

Funkcje callback to funkcje przekazywane do wtyczki, które wtyczka wykonuje w określonych momentach swojego cyklu życia lub po wystąpieniu określonych zdarzeń wewnętrznych.

Pozwalają użytkownikom „podłączać się” do działania wtyczki i dodawać własną logikę bez modyfikowania kodu źródłowego wtyczki.

  • Można traktować je jak odbiorniki zdarzeń dla wewnętrznych działań wtyczki.
  • Typowe callbacki to: onInit, onChange, onComplete.

Implementowanie callbacku

Aby zaimplementować callback, należy najpierw zdefiniować go w opcjach domyślnych wtyczki. Następnie wewnątrz wtyczki wystarczy wywołać tę funkcję, gdy wystąpi odpowiednie zdarzenie, przekazując wszelkie przydatne dane.

Rozszerzmy naszą wtyczkę licznika o callback onChange.

(function($) {
  $.fn.counterPlugin = function(options) {
    var settings = $.extend({
      initialValue: 0,
      onChange: function(newValue) {} // Default empty callback
    }, options);

    return this.each(function() {
      var $this = $(this);
      var value = settings.initialValue;

      var methods = {
        getValue: function() {
          return value;
        },
        increment: function() {
          value++;
          $this.text(value);
          // Call the callback when value changes
          settings.onChange.call($this[0], value); 
        },
        init: function() {
          $this.text(value);
        }
      };

      $this.data('counterPlugin', methods);
      methods.init();
    });
  };
})(jQuery);

// Usage: See next scene!

Przekazywanie funkcji callback

Użytkownicy przekazują własne funkcje callback bezpośrednio w obiekcie opcji wtyczki podczas inicjalizacji. Wtyczka wywoła te funkcje w odpowiednim momencie.

Proszę zwrócić uwagę na użycie .call($this[0], value). Ustawia ono wartość this wewnątrz callbacku na element DOM i przekazuje nową wartość jako argument.

// Assume counterPlugin with onChange callback is loaded

// HTML: <div id="myCounter"></div>

$(document).ready(function() {
  $('#myCounter').counterPlugin({
    initialValue: 10,
    onChange: function(newValue) {
      console.log("Counter changed to: " + newValue + " on element: " + this.id);
      if (newValue % 2 === 0) {
        $(this).css('color', 'blue');
      } else {
        $(this).css('color', 'red');
      }
    }
  });

  var counterInstance = $('#myCounter').data('counterPlugin');
  counterInstance.increment(); // Triggers callback
  counterInstance.increment(); // Triggers callback
});

Wiele metod i callbacków

Można definiować wiele metod publicznych i kilka różnych callbacków do obsługi rozmaitych zdarzeń we wtyczce. Dzięki temu powstaje elastyczny i zaawansowany komponent.

  • Metody publiczne pozwalają użytkownikom sterować wtyczką.
  • Callbacki pozwalają wtyczce informować kod użytkownika o tym, co się dzieje.
(function($) {
  $.fn.advancedCounter = function(options) {
    var settings = $.extend({
      initial: 0,
      onIncrement: null, // New callback
      onDecrement: null, // New callback
      onReset: null      // New callback
    }, options);

    return this.each(function() {
      var $this = $(this);
      var value = settings.initial;

      var methods = {
        getValue: function() { return value; },
        increment: function() {
          value++;
          $this.text(value);
          if ($.isFunction(settings.onIncrement)) {
            settings.onIncrement.call($this[0], value);
          }
        },
        decrement: function() {
          value--;
          $this.text(value);
          if ($.isFunction(settings.onDecrement)) {
            settings.onDecrement.call($this[0], value);
          }
        },
        reset: function() {
          value = settings.initial;
          $this.text(value);
          if ($.isFunction(settings.onReset)) {
            settings.onReset.call($this[0], value);
          }
        },
        init: function() { $this.text(value); }
      };

      $this.data('advancedCounter', methods);
      methods.init();
    });
  };
})(jQuery);

// HTML: <div id="myAdvancedCounter"></div>
$(document).ready(function() {
  $('#myAdvancedCounter').advancedCounter({
    initial: 100,
    onIncrement: function(v) { console.log("Inc: " + v); },
    onReset: function(v) { console.log("Reset to: " + v); }
  });
  var inst = $('#myAdvancedCounter').data('advancedCounter');
  inst.increment();
  inst.reset();
});

Wskazówki dotyczące metod publicznych i callbacków

Projektując publiczny interfejs wtyczki, należy pamiętać o następujących wskazówkach:

  • Spójne nazewnictwo: Należy używać jasnych i opisowych nazw metod oraz callbacków.
  • Obsługa błędów: Przed wywołaniem callbacku należy sprawdzić, czy jest on funkcją (np. $.isFunction(settings.onComplete)).
  • Kontekst: Należy używać .call() lub .apply(), aby ustawić kontekst this dla callbacków, często na element, do którego zastosowano wtyczkę.
  • Argumenty: Należy przekazywać callbackom odpowiednie dane (np. nową wartość lub obiekt zdarzenia).

Quiz: interakcja z wtyczką

Rozważmy wtyczkę jQuery zainicjowaną dla elementu #myElement. Wtyczka ma metodę publiczną o nazwie doSomething() oraz callback onComplete.

Który fragment kodu prawidłowo wywołuje metodę publiczną ORAZ przekazuje niestandardowy callback podczas inicjalizacji?

Podsumowanie i dalsze kroki

Opanowali już Państwo tworzenie naprawdę interaktywnych i elastycznych wtyczek jQuery!

  • Metody publiczne umożliwiają zewnętrznemu kodowi sterowanie wtyczką i odczytywanie z niej danych po jej zainicjowaniu.
  • Callbacki zapewniają punkty rozszerzeń, dzięki którym użytkownicy mogą wstrzykiwać własną logikę i reagować na wewnętrzne zdarzenia wtyczki.

Techniki te są kluczowe podczas tworzenia solidnych, wielokrotnego użytku i przyjaznych dla użytkownika wtyczek jQuery.

Często zadawane pytania

Czy lekcja „Integracja metod publicznych i callbacków” jest bezpłatna?

Tak — pełny tekst „Integracja metod publicznych i callbacków” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu jQuery Academy, przejdź na CoddyKit PRO. Kurs jQuery Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Integracja metod publicznych i callbacków”?

Proszę dodawać do wtyczek metody publiczne umożliwiające interakcję z zewnętrznym kodem oraz uwzględniać funkcje callback pozwalające użytkownikom reagować na określone zdarzenia wtyczek. Ćwiczysz jQuery Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć jQuery Academy?

Nie wymagamy żadnego doświadczenia. jQuery Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Integracja metod publicznych i callbacków”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji jQuery Academy?

Tak. Każda lekcja jQuery Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wzorce projektowe i zakresy wtyczek
  2. Tworzenie konfigurowalnych i wielokrotnego użytku wtyczek
  3. Integracja metod publicznych i callbacków
← Powrót do jQuery Academy