2016-11-17 4 views
1

Ich versuche, jQuery Autocomplete-Erweiterung in foreach Knockout-Schleife zu integrieren. Ich habe benutzerdefinierte Bindungen und automatische Vervollständigungen erstellt. Aber nach der automatischen Vervollständigung muss ich auch das beobachtbare Objektmodell aktualisieren und kann nicht herausfinden, wie es geht. Hier sind Sie mein Code:Update beobachtet Modell in benutzerdefinierten knockoutjs Bindung

<!-- ko foreach: items --> 
<input data-bind="autoComplete: { source: '/products/item-search-ajax', options: { delay: 100, max: 20, minChars: 2, extraParams: { itcode: 1 }}, findCallback: $parent.findValueCallback }, value: PartNumber" type="text"> 
<!-- /ko --> 

<script type="text/javascript"> 

     ko.bindingHandlers.autoComplete = { 
      init: function (element, valueAccessor, allBindings, viewModel, bindingContext) { 
       var settings = valueAccessor(); 
       var source = settings.source; 
       var options = settings.options; 
       var findCallback = settings.findCallback; 
       $(element).autocomplete(source, options); 
       $(element).result(findCallback); 
       ko.bindingHandlers.value.init(element, valueAccessor, allBindings); 
      }, 
      update: function(element, valueAccessor) { 
       var value = valueAccessor(); 
       ko.bindingHandlers.value.update(element,valueAccessor); 
      } 
     }; 

     function QuoteViewModel() { 
      var self = this; 

      self.items = ko.observableArray(...); 

      self.findValueCallback = function(event, data, formatted) { 

       // Need to update Item model here from autocomplete 
      }; 
     } 

</script> 
+0

jQuery UI Autocomplete? Das wurde gemacht. Verwenden Sie den vorhandenen Bindungshandler. http://gvas.github.io/knockout-jqueryui/autocomplete.html – Tomalak

+0

Es ist eine andere automatische Autovervollständigung. Und ich könnte bereits eine automatische Vervollständigungserweiterung verbinden. Ich weiß einfach nicht, wie man das beobachtbare Modell von der benutzerdefinierten Bindung aktualisiert. –

+0

Okay, welche Autocomplete-Bibliothek ist das? – Tomalak

Antwort

0

Grundsätzlich können Sie passieren das $data Objekt in eine Funktion (die in diesen foreach ein Artikel Modell wäre), die eine Behandlungsfunktion als solche zurückgibt:

self.findValueCallback = function(item) { 
    return function(event, data, formatted) { 
     //u have access to particular item 
    } 
} 

und innerhalb einer Bindung: findCallback: $parent.findValueCallback($data)

Verwandte Themen