2009-11-04 7 views
3

J'utilise le jQuery token input plugin et je voudrais changer son comportement quand un jeton est ajouté.Plugin jQuery: Utiliser le rappel pour modifier le comportement du plugin

j'ai ajouté un rappel « onAddToken » au code original que je peux voir quand un jeton est ajouté à la zone d'entrée, mais je ne suis pas sûr de savoir comment modifier l'URL de tokenInput de « url/to/appelez "vers une nouvelle URL", nouveau/url/to/call ".

ce, $ ce et $ (this) ne semblent pas fonctionner. Aucune suggestion?

$("#input").tokenInput("/url/to/call", { 
     noResultsText: "No results yet. Type some more...", 
     searchingText: "Searching...", 
     onAddToken: function(args) { 
      // alter tokenInput itself to use "new/url/to/call" instead of 
      // the original "url/to/call/" 
    } 
}); 

Répondre

3

Le problème est que tous les arguments de la fonction qui sont des types natifs (numéros, chaînes, etc ...) qu'ils seront passés par valeur (copiés) à la fonction appelée. Vous voulez avoir un argument qui est passé par référence, et le seul moyen de le faire en javascript est de passer un objet.

Au callsite (dans le plug-in) appeler la fonction quelque chose comme ceci:

config.onAddToken({url: myUrlVar}); 

alors dans votre rappel vous pouvez modifier la valeur de la propriété url de l'objet passé en.

$("#input").tokenInput("/url/to/call", { 
     noResultsText: "No results yet. Type some more...", 
     searchingText: "Searching...", 
     onAddToken: function(oUrl) { 
      oUrl.url = "mynew/url"; 
     } 
}); 

Ceci est utile dans les cas où vous souhaitez transmettre plusieurs valeurs par référence, dans votre cas, cependant, vous voudrez peut-être simplement votre déclaration de rappel quelle que soit la valeur URL que vous voulez que le plug-in à utiliser, ce qui met un certain fardeau sur le développeur à savoir le faire mais cela peut être plus facile.

Au callsite:

myUrlVar = config.onAddToken(myUrlVar); 

Et le rappel:

$("#input").tokenInput("/url/to/call", { 
     noResultsText: "No results yet. Type some more...", 
     searchingText: "Searching...", 
     onAddToken: function(oUrl) { 
      return "mynew/url"; 
     } 
}); 

Ou vous pourriez par défaut pour simplement utiliser la valeur s'il n'y avait rien la fonction de rappel:

var newUrlVar = config.onAddToken(myUrlVar); 
if(newUrlVar) 
    myUrlVar = newUrlVar; 

Si la fonction de rappel n'a pas de retour, alors sa valeur devrait être nulle.

+0

Merci beaucoup pour votre réponse détaillée. Je suis allé avec votre première option, ce qui m'a donné une flexibilité maximale, et cela a fonctionné parfaitement. Je peux même renvoyer tous les paramètres du plugin en tant qu'objet à modifier. Encore une fois, excellente réponse - merci! –