Question

Je viens de convertir en utilisant Bloodhound.js et Timeahead.js avec knockout.J'ai quelques problèmes -

  1. La typessehead n'affiche pas la propriété Name dans la liste des suggestions
  2. Je ne peux pas comprendre comment mettre à jour la mise à jour de la requête contre
  3. http://jsfiddle.net/ea93f/2/

    Je suis "statiquement" en ajoutant de nouvelles données, mais il devrait toujours apparaître dans le jeu de résultats et n'est pas

    self.addNew = function () {
        self.someOptions.push(new Option(self.someOptions().length + 1, 'Johnnn'));
    }
    

    Je suis prêt à toutes les suggestions qui fonctionnent, je ne suis donc pas bloqué en utilisant de Bloodhound.js Si ce n'est pas nécessaire, mais en raison de la nature de mon application, je ne peux pas supprimer les propriétés comme observables, mais appeler ko.tojs àCertains points sont définitivement une option.

Était-ce utile?

La solution

Le premier numéro est avec le displaykey.Vous devez fournir une fonction explicite dans votre reliure

html

<input type="text" data-bind="typeahead: { name: 'something', taOptions: theseOptions, displayKey: 'Name' }, value: thisValue" />

javascript

    // In ko.bindingHandlers.typeahead.init function
    var displayKey = options.displayKey;
    options.displayKey = function(item) {
        return item[displayKey]();
    };

Le deuxième problème est avec l'utilisation de la section locale.On dirait que le système ne recalcule pas la source après l'initialisation.En regardant les documents dont vous avez probablement besoin d'utiliser l'option à distance et de prétendre être une demande / réponse AJAX.Vous devez également implémenter votre propre filtre de résultats, ainsi que le piratage autour de DecandeCache lorsque des options sont mises à jour.

J'ai mis à jour votre jsfiddle avec les ...

self.theseOptions = new Bloodhound({
  datumTokenizer: function(d) { 
      var seomth = Bloodhound.tokenizers.whitespace(d.Name());
      console.log(seomth);
      return seomth },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote : {
        url : '%QUERY',
        transport : function(url, options, onSuccess, onError) {
            var deferred = $.Deferred();
            deferred.done( function() { onSuccess(this); });

            var filterVal = url.toLowerCase();
            var result = self.someOptions().filter( function(item) {
                return !!~item.Name().toLowerCase().indexOf(filterVal);
            });
            deferred.resolveWith( result );
            return deferred.promise();
        }

    }
  //local: self.someOptions()
});

self.addNew = function () {
    self.someOptions.push(new Option(self.someOptions().length + 1, 'Johnnn'));
    self.theseOptions.transport.constructor.resetCache();
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top