IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[POO] Appel dynamique d'une méthode


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 21
    Points
    21
    Par défaut [POO] Appel dynamique d'une méthode
    Bonjour à tous,
    Je cherche à appeler dynamiquement une méthode via Javascript (j'utilise Prototype et je pensais utilise "invoke" mais ca ne me donne pas le résultat voulu...)
    Pour résumer, pour ceux qui connaissent C#, j'aimerais avoir le même comportement que System.Reflection.MethodInfo.Invoke(obj, parameters)

    PAr exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function Invoke(methodName)
    {
      $(objet).invoke(methodName);
    }
    Merci de votre aide

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    une traduction plus orientée Javascript donnerait C'est ça ?

    A+

  3. #3
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Pourquoi dis-tu que la méthode invoke() ne donne pas le résultat voulu ? Ca semble pourtant être adapté à ce que tu cherches à faire...

    (edit : au fait, c'est pour simplifier l'exemple que tu ne passes pas "objet" en paramètre ?)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    d'après ce que je comprends, avec "invoke" on a appelé des méthodes du type "substring", "addClassName", càd qui "existent" déjà en JS. Moi j'aimerais une fonction que j'ai développé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function TestFonction(parametre)
    {
      ...
    }
     
    function AppelFonction(functionName)
    {
       // des traitements divers
       ...
       ...
       ...
     
      // ici functionName vaut par exmple "TestFonction"
      document.invoke(functionName, monParametre);
    }
    je vous explique pas la finalité, ce serait un peu compliqué...!

    Merci

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    A mon avis c'est tout simple, mais pas sur d'avoir compris ton besoin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function TestFonction(parametre)
    {
      ...
    }
     
    function AppelFonction(functionName)
    {
       // des traitements divers
       ...
     
      // ici functionName vaut par exmple "TestFonction"
      functionName(monParametre);
    }

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    une autre methode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
     
    function foo(text1,text2){
    alert(text1+ '  '+text2)
    }
     
    function bar(funct,arg1,arg2){
    window[funct](arg1,arg2)
    }
     
    bar('foo','je suis','là')
    </script>

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    bon je vais essayer d'expliquer ce que je veux

    La finalité c'est de développer une DIV "scrollable", avec une liste qui se complète au fur au mesure qu'on descend avec le scroll.
    Disons que j'ai 100 articles à afficher, je vais par défaut en afficher 10 (j'ai une méthode C# qui liste ces articles avec deux paramètres, startIndex (=0 au début) et count(=10 au début), quand je scrolle je lance la fonction C# avec startIndex = 11 et count = 10, puis startIndex = 22, count = 10 etc...

    pour mettre à jour la liste des articles, j'utilise l'objet Ajax.Updater de javascript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // toUpdate = la DIV à mettre à jour
    // urlUpdater = la méthode C# que j'appelle
    // parameters : mes paramètres startIndex et count qui varient
     
    new Ajax.Updater(
                $(this.toUpdate),
                this.urlUpdater,
            {
                parameters: { startIndex: this.startIndex, count: this.count },
                insertion: this.insertion,
                onSuccess: this.startIndex += this.count,
                asynchronous: false,
                onComplete: function(t) { if (t.responseText == "") el.onscroll = null; }
            }
            );
    Le truc c'est que j'aimerais gérer cette objet de manière générique, du coup les paramètres startIndex et count peuvent ne pas être les seuls dans un autre contexte. Par exemple, pour une liste de clients, je vais avoir une fonction C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public IEnumerable<Client> List(int startIndex, int count)
    {
    }
    et pour une liste d'articles j'aurai peut-être un 3è paramètre (par exemple la famille d'article - bijou, montre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public IEnumerable<Article> List(int startIndex, int count, string familleID)
    donc comme ne vois comment ajouter ces paramètres dynamiquement dans "parameters", côté JS, je me dis je vais appeler dynamiquement la fonction qui contient Ajax.Updater

    Dans le cas des articles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    new Ajax.Updater(
                $(this.toUpdate),
                this.urlUpdater,
            {
                parameters: { startIndex: this.startIndex, count: this.count, familleID: 32 },
                insertion: this.insertion,
                onSuccess: this.startIndex += this.count,
                asynchronous: false,
                onComplete: function(t) { if (t.responseText == "") el.onscroll = null; }
            }
            );
    dans le cas des clients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    new Ajax.Updater(
                $(this.toUpdate),
                this.urlUpdater,
            {
                parameters: { startIndex: this.startIndex, count: this.count },
                insertion: this.insertion,
                onSuccess: this.startIndex += this.count,
                asynchronous: false,
                onComplete: function(t) { if (t.responseText == "") el.onscroll = null; }
            }
            );
    j'espère avoir été clair

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    une autre methode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
     
    function foo(text1,text2){
    alert(text1+ '  '+text2)
    }
     
    function bar(funct,arg1,arg2){
    window[funct](arg1,arg2)
    }
     
    bar('foo','je suis','là')
    </script>
    je teste ca de suite, merci beaucoup !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    une autre methode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
     
    function foo(text1,text2){
    alert(text1+ '  '+text2)
    }
     
    function bar(funct,arg1,arg2){
    window[funct](arg1,arg2)
    }
     
    bar('foo','je suis','là')
    </script>
    c'est nickel mec, merci beaucoup !

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    unniveraslisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function foo(){
    for(i=0;i<arguments.length;i++){alert(arguments[i]);}
    }
     
    function bar(funct){
    var Arguments=new Array();
    for(i=1;i<arguments.length;i++){Arguments.push(arguments[i])}
    window[funct].apply(this,Arguments )
    	}
     
    bar('foo','je suis','là')
    le premier param est la fonction appelée les suivant les paramètre que l'on souhaite lui passer ...

  11. #11
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    @SpaceFrog pour la version "universalisée" () de cette fonction :

    Je me demandais : est-ce que "arguments", qui contient (si j'ai bien compris) l'ensemble des paramètres passés à "bar", ne va pas justement aussi contenir en première valeur le nom de fonction passé à "bar", en l'occurrence "foo", et essayer de le passer en argument à "foo" au moment du "apply" ?
    Peut-être que j'ai raté quelquechose... ^^ C'était juste par curiosité

    edit : ooops... je n'avais pas vu que la boucle for commençait avec un indice i à 1 ^^ J'ai rien dit...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. POO Appel dynamique à une méthode d'un objet
    Par thecanea dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/02/2011, 11h58
  2. Appel dynamique d'une méthode statique
    Par oneTime dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2008, 11h29
  3. [Aide] Appel dynamique d'une DLL ?
    Par QAYS dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2007, 14h31
  4. [POO] Appels Dynamiques à des classes
    Par Korko Fain dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 09h26
  5. [POO] affectation dynamique d'une méthode à un objet
    Par Delphi-ne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/02/2006, 21h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo