Heim Web-Frontend js-Tutorial Knockout-Kenntnisse für die Erstellung benutzerdefinierter Bindungen in Javascript

Knockout-Kenntnisse für die Erstellung benutzerdefinierter Bindungen in Javascript

May 16, 2016 pm 03:23 PM

Übersicht

Zusätzlich zu den im vorherigen Artikel aufgeführten integrierten Bindungstypen von KO (z. B. Wert, Text usw.) können Sie auch benutzerdefinierte Bindungen erstellen.

Registrieren Sie Ihren Bindungshandler

ko.bindingHandlers.yourBindingName = {
  init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
    // This will be called when the binding is first applied to an element
    // Set up any initial state, event handlers, etc. here
  },
  update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
    // This will be called once when the binding is first applied to an element,
    // and again whenever any observables/computeds that are accessed change
    // Update the DOM element based on the supplied values here.
  }
}; 
Nach dem Login kopieren

Als nächstes können Sie eine benutzerdefinierte Bindung für jedes Dom-Element verwenden:

<div data-bind="yourBindingName: someValue"> </div> 
Nach dem Login kopieren

Hinweis: Sie müssen in Ihrem Handler nicht sowohl Init- als auch Update-Rückrufe bereitstellen, Sie können einen von beiden bereitstellen.

Update-Rückruf

Wie der Name schon sagt, ruft ko automatisch Ihren Aktualisierungsrückruf auf, wenn Ihr beobachtbares Überwachungsattribut aktualisiert wird.

Es hat die folgenden Parameter:

-Element: Verwenden Sie dieses gebundene Dom-Element;

valueAccessor: Der aktuell gebundene Modellattributwert kann durch Aufrufen von valueAccessor() abgerufen werden, um den beobachtbaren Wert und den gewöhnlichen Wert zu erhalten


allBindings: Alle Attributwerte, die an das Modell dieses Dom-Elements gebunden sind. Rufen Sie beispielsweise callBindings.get('name') auf, um den gebundenen Namensattributwert zurückzugeben (wenn er nicht vorhanden ist, geben Sie undefiniert zurück), oder call allBindings.has('name') bestimmt, ob name an den aktuellen Dom

gebunden ist


viewModel: In Knockout.3x veraltet, Sie können bindingContext.$data oder bindingContext.$rawData verwenden, um das aktuelle viewModel abzurufen;

bindingContext: Bindungskontext, Sie können bindingContext.$data, bindingContext.$parent, bindingContext.$parents usw. aufrufen, um Daten zu erhalten;

Sehen Sie sich als Nächstes ein Beispiel an. Möglicherweise möchten Sie die Sichtbarkeit von Elementen steuern und Animationseffekte hinzufügen:


Sie können diese benutzerdefinierte Bindung dann wie folgt verwenden:
ko.bindingHandlers.slideVisible = {
  update: function(element, valueAccessor, allBindings) {
    // First get the latest data that we're bound to
    var value = valueAccessor();
    // Next, whether or not the supplied model property is observable, get its current value
    var valueUnwrapped = ko.unwrap(value);
    // Grab some more data from another binding property
    var duration = allBindings.get('slideDuration') || 400; // 400ms is default duration unless otherwise specified
    // Now manipulate the DOM element
    if (valueUnwrapped == true)
      $(element).slideDown(duration); // Make the element visible
    else
      $(element).slideUp(duration);  // Make the element invisible
  }
}; 
Nach dem Login kopieren


Init-Rückruf
<div data-bind="slideVisible: giftWrap, slideDuration:600">You have selected the option</div>
<label><input type="checkbox" data-bind="checked: giftWrap" /> Gift wrap</label>
<script type="text/javascript">
  var viewModel = {
    giftWrap: ko.observable(true)
  };
  ko.applyBindings(viewModel);
</script> 
Nach dem Login kopieren

ko ruft Ihre Init-Funktion für jedes Dom-Element auf, das Bindung verwendet. Dies hat zwei Hauptzwecke:

(1) Legen Sie den Initialisierungsstatus für das Dom-Element fest;


(2) Registrieren Sie einige Ereignishandler, zum Beispiel: Wenn der Benutzer auf das Dom-Element klickt oder es ändert, können Sie den Status des Überwachungsattributs ändern;

ko verwendet genau denselben Parametersatz wie der Update-Callback.

Wenn Sie mit dem vorherigen Beispiel fortfahren, möchten Sie möglicherweise, dass slideVisible den Sichtbarkeitsstatus des Elements (ohne Animationseffekt) festlegt, wenn die Seite zum ersten Mal angezeigt wird, und der Animationseffekt ausgeführt wird, wenn er sich später ändert. So können Sie vorgehen um es zu tun:


giftWrap wird initialisiert und als falsch definiert (ko.observable(false)). Der zugehörige DIV wird während der Initialisierung ausgeblendet und dann wird der DIV nur angezeigt, wenn der Benutzer auf das Kontrollkästchen klickt.

Sie wissen jetzt, wie Sie Update-Callbacks verwenden, um DOM-Elemente zu aktualisieren, wenn sich der beobachtbare Wert ändert. Wir können dazu jetzt eine andere Methode verwenden. Wenn der Benutzer beispielsweise eine Aktion ausführt, kann dies auch dazu führen, dass Ihr beobachtbarer Wert aktualisiert wird, zum Beispiel:
ko.bindingHandlers.slideVisible = {
  init: function(element, valueAccessor) {
    var value = ko.unwrap(valueAccessor()); // Get the current value of the current property we're bound to
    $(element).toggle(value); // jQuery will hide/show the element depending on whether "value" or true or false
  },
  update: function(element, valueAccessor, allBindings) {
    // Leave as before
  }
}; 
Nach dem Login kopieren


Jetzt können Sie Ihre beobachtbaren Werte über die „Focusedness“-Bindung des Elements lesen und schreiben.

ko.bindingHandlers.hasFocus = {
  init: function(element, valueAccessor) {
    $(element).focus(function() {
      var value = valueAccessor();
      value(true);
    });
    $(element).blur(function() {
      var value = valueAccessor();
      value(false);
    });
  },
  update: function(element, valueAccessor) {
    var value = valueAccessor();
    if (ko.unwrap(value))
      element.focus();
    else
      element.blur();
  }
}; 
Nach dem Login kopieren

Der obige Inhalt ist die vom Herausgeber geteilte Methode zum Erstellen einer benutzerdefinierten Knockout-Bindung. Ich hoffe, sie gefällt Ihnen.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Detaillierte Erläuterung der Methode für JavaScript -Zeichenfolge und FAQ In diesem Artikel werden zwei Möglichkeiten untersucht, wie String -Zeichen in JavaScript ersetzt werden: Interner JavaScript -Code und interne HTML für Webseiten. Ersetzen Sie die Zeichenfolge im JavaScript -Code Die direkteste Möglichkeit ist die Verwendung der Ersatz () -Methode: str = str.replace ("find", "ersetzen"); Diese Methode ersetzt nur die erste Übereinstimmung. Um alle Übereinstimmungen zu ersetzen, verwenden Sie einen regulären Ausdruck und fügen Sie das globale Flag G hinzu:: STR = Str.Replace (/fi

8 atemberaubende JQuery -Seiten -Layout -Plugins 8 atemberaubende JQuery -Seiten -Layout -Plugins Mar 06, 2025 am 12:48 AM

Nutzen Sie JQuery für mühelose Webseiten -Layouts: 8 Essential Plugins JQuery vereinfacht das Webseitenlayout erheblich. In diesem Artikel werden acht leistungsstarke JQuery -Plugins hervorgehoben, die den Prozess optimieren, insbesondere nützlich für die manuelle Website -Erstellung

Erstellen Sie Ihre eigenen AJAX -Webanwendungen Erstellen Sie Ihre eigenen AJAX -Webanwendungen Mar 09, 2025 am 12:11 AM

Hier sind Sie also bereit, alles über dieses Ding namens Ajax zu lernen. Aber was genau ist das? Der Begriff AJAX bezieht sich auf eine lose Gruppierung von Technologien, mit denen dynamische, interaktive Webinhalte erstellt werden. Der Begriff Ajax, ursprünglich von Jesse J geprägt

10 JQuery Fun- und Games -Plugins 10 JQuery Fun- und Games -Plugins Mar 08, 2025 am 12:42 AM

10 Fun JQuery Game -Plugins, um Ihre Website attraktiver zu machen und die Stickinität der Benutzer zu verbessern! Während Flash immer noch die beste Software für die Entwicklung von lässigen Webspielen ist, kann JQuery auch überraschende Effekte erzielen und zwar nicht mit reinen Action -Flash -Spielen vergleichbar sind, aber in einigen Fällen können Sie auch einen unerwarteten Spaß in Ihrem Browser haben. JQuery Tic Toe Game Die "Hello World" der Game -Programmierung hat jetzt eine Jquery -Version. Quellcode JQuery Crazy Word Kompositionsspiel Dies ist ein Spiel mit der Füllung, und es kann einige seltsame Ergebnisse erzielen, da das Wort nicht kennt. Quellcode JQuery Mine Sweeping Game

Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Mar 18, 2025 pm 03:12 PM

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

Laden Sie den Inhalt des Box dynamisch mit AJAX Laden Sie den Inhalt des Box dynamisch mit AJAX Mar 06, 2025 am 01:07 AM

Dieses Tutorial zeigt, dass dynamische Seitenfelder über AJAX geladen werden und sofortige Aktualisierung ohne vollständige Seiten -Nachladen ermöglicht werden. Es nutzt JQuery und JavaScript. Betrachten Sie es als einen benutzerdefinierten Content-Box-Loader im Facebook-Stil. Schlüsselkonzepte: Ajax und JQuery

JQuery Parallax Tutorial - Animated Header Hintergrund JQuery Parallax Tutorial - Animated Header Hintergrund Mar 08, 2025 am 12:39 AM

Dieses Tutorial zeigt, wie ein faszinierender Parallaxen -Hintergrundeffekt mit JQuery erstellt wird. Wir werden ein Header -Banner mit geschichteten Bildern bauen, die eine atemberaubende visuelle Tiefe erzeugen. Das aktualisierte Plugin funktioniert mit JQuery 1.6.4 und später. Laden Sie die herunter

So schreiben Sie eine Cookie-Less-Sitzungsbibliothek für JavaScript So schreiben Sie eine Cookie-Less-Sitzungsbibliothek für JavaScript Mar 06, 2025 am 01:18 AM

Diese JavaScript -Bibliothek nutzt das Fenster.name -Eigenschaft, um Sitzungsdaten zu verwalten, ohne sich auf Cookies zu verlassen. Es bietet eine robuste Lösung zum Speichern und Abrufen von Sitzungsvariablen über Browser hinweg. Die Bibliothek bietet drei Kernmethoden: Sitzung

See all articles