2010-03-19 1 views
2

La bibliothèque Javascript de Google Closure (GC) facilite la création d'une interface de saisie semi-automatique, comme le montre cette démo - http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/autocomplete-basic.html. Fondamentalement, tout ce que nous avons à faire est de définir un tableau et de le transmettre comme l'un des paramètres. J'aimerais pouvoir mettre à jour le tableau dynamiquement et que la saisie semi-automatique affiche les modifications immédiatement.Google Closure: Définition dynamique de l'entrée pour la saisie semi-automatique

Par exemple, s'il y a deux tableaux

list1 = ["One", "Two", "Three"] 
list2 = ["1", "2", "3"] 

et une saisie semi-automatique a été initialisé en utilisant list1,

var suggest = new goog.ui.AutoComplete.Basic(list1, document.getElementById('input'), false); 

comment puis-je mettre à jour la saisie semi-automatique existante (suggérer) d'utiliser liste2?

Répondre

1

Il n'existe pas d'API publique pour cela. Vous pouvez créer une sous-classe avec une méthode qui modifie la variable matcher_ protégée comme ceci:

this.matcher_ = new goog.ui.AutoComplete.ArrayMatcher(list2, false); 

Si vous souhaitez mettre à jour dynamiquement à partir d'une source distante, utilisez goog.ui.AutoComplete.Remote.

+0

Ça craint ... trop de travail! Merci quand même, Annie. Regardera une autre solution quickie prête à l'emploi. – user297006

+0

Vous pouvez probablement simplement le pirater - suggest.matcher_ = new goog.ui.AutoComplete.ArrayMatcher (list2, false); – Annie

+0

Le problème est qu'il pourrait y avoir environ 20 tableaux différents. Impossible de continuer à créer une nouvelle saisie semi-automatique ou ArrayMatcher pour chacun d'entre eux. – user297006

1

Voici ce que j'utiliser pour être en mesure de mettre à jour le tableau avec l'Auto de base complète

/** 
* Set the post data for the matcher. 
* @param {string} content Post data. 
*/ 
goog.ui.AutoComplete.Basic.prototype.setContent = function(content) { 

    this.matcher_.setContent(content); 
}; 
/** 
* Set the post data. 
* @param {string} content Post data. 
*/ 
goog.ui.AutoComplete.ArrayMatcher.prototype.setContent =function(content) { 
    this.rows_ = content; 
    this.content_ = content; 
}; 

alors de votre code que vous appelez suggest.setContent (myarray) chaque fois que vous souhaitez mettre à jour le liste

0

obtenir d'abord la matcher en utilisant getMatcher(), puis définissez les nouvelles lignes en utilisant le setRows(newRows).

Questions connexes