2010-10-20 7 views
1

J'ai un problème délicat.Plugin jquery: appel multiple à une fonction, passant différents paramètres

J'ai fait un plug-in jquery Widget:

$.fn.Widget=function(id_place,id_event,options){}; 

Je l'appelle une fois lorsque la page est prête: (en précisant que je veux un dernier tri)

$(document).ready(function() { 
    $('#mydiv').Widget(13,50,{"sort":"last"}); 

}); 

Mais dans ce plugin , Je génère une petite barre de menu, avec 3 liens pour changer le tri de mes éléments: "dernier" (appel initial); "top" (le plus populaire) et "répondu" (avec des réponses)

Ma question est: comment, dans ce code généré à l'intérieur de mon plugin, Trier PopularSort LastSort répondu, changer le tri de mon Widget ??

Puis-je appeler Widget(13,50,{"sort":"top"}) à l'intérieur de celui-ci, ou puis-je utiliser une fonction interne comme change_sorting(top) ??

Thx beaucoup pour votre temps et votre aide

EDIT: Merci pour vos réponses: J'ai ajouté ces lignes dans mon plugin:

var object = $(this); 
    $(".sort_last").click(function(){ object.Widget(13,50,{"sort":"last"}); }); 
    $(".sort_top").click(function(){ object.Widget(13,50,{"sort":"top"}); }); 
    $(".sort_answered").click(function(){ object.Widget(13,50,{"sort":ansered"}); }); 
+0

Je suis désolé de dire cela, mais je ne comprenais pas votre problème ... Si vous générez le code HTML dans votre plugin cela signifie que vous avez accès à cet effet le modifier ne devrait pas poser de problème?! – MaxouMask

+0

Je ne savais pas comment faire l'appel à mon plugin pour changer la méthode de tri. – guillaumepotier

Répondre

1

1er tout ce qu'il est bon de vérifier pour l'existence des éléments avant de les créer. 2ème - en considérant comment les autres méthodes de jquery fonctionnent, mieux serait d'utiliser Widget(13,50,{"sort":"top"}) pour la création et la mise à jour

+0

Ok, merci pour cette réponse. – guillaumepotier

1

Si le changement de tri est fait par l'utilisateur, il ne devrait pas être dans le constructeur Widget. Vous pouvez facilement changer la valeur de Sort dans le constructeur avec options.sort = "newSort";, mais je pense que vous voulez quelque chose de différent.

envisager l'ajout d'une méthode de l'objet tel que:

$.fn.Widget.prototype.changeSort(sort) { 
    // add your sorting code here, using this.sort as the current sort 
} 

qui va traiter toutes les changeant de la sorte; De cette façon, il aide à faire abstraction du mécanisme de tri de la création du Widget (ils me semblent différents).

Si vous voulez accéder au classement en cours dans votre méthode, vous pouvez l'affecter à « ce » dans le constructeur:

this.sort = options.sort et font référence à this.sort dans toutes les méthodes sur le prototype Widget.

Vous pouvez alors faire:

$(function() { 
    var widget = $('#mydiv').Widget(13,50,{ sort: 'last' }); 
    widget.changeSort("answered"); 
}); 
+0

Bonjour Emmerich. Merci pour votre réponse. Pouvez-vous jeter un coup d'oeil à mon édition ci-dessus. J'ai trouvé quelque chose qui semble vraiment bien fonctionner. Quels sont les avantages de votre méthode plutôt que celle ci-dessus? Thx encore – guillaumepotier

+0

Eh bien cela dépend de la quantité de traitement que vous faites dans votre Widget et de la sémantique de celui-ci. Par exemple, si le widget a été créé une fois pour la page, puis modifié, j'irais avec ma méthode.La façon dont vous l'avez codé signifie qu'à chaque fois que l'utilisateur clique, le code du widget est à nouveau exécuté (y compris l'initialisation du widget). Vous remplacez l'ancien widget par un nouveau, même si les données n'ont pas changé. juste la vue des données). Avec le mien, seule la logique entourant le tri des Widgets est exécutée. – EMMERICH

+0

Ok alors. Je considérerai votre réponse si vous faites des widgets/plugins plus complexes à l'avenir. Celui-ci affiche juste des citations triées avec pas beaucoup plus. Je m'en tiendrai à ça;) – guillaumepotier

Questions connexes