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

jQuery Discussion :

Communiquer avec son composant [Plugin]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut Communiquer avec son composant
    Bonjour,

    J'ai créé un composant graphique jquery. Je souhaiterai maintenant l'interroger.
    L'idée serait par une fonction javascript faire un appel à une fonction de mon composant.
    J'ai fais un exemple simple http://jsfiddle.net/szy4gj6v/
    Dans mon exemple, je voudrai que la fonction GetInfo me retourne 'blue'.

  2. #2
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Pour arriver à ce genre de manipulation il te faudra passer par les classes et l'instanciation. Voici un pattern que j'utilise souvent pour écrire des plugins et qui est directement dérivé de bootstrap:

    Code javascript : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    +function ($) {
      'use strict';
     
      var BK = function (element, options) {
        this.options = options;
        this.$element = $(element);
        this.n = this.$element.attr('id');
     
        this.$element.css('background', this.options.bkg);
      }
     
      BK.DEFAULTS = {
        bkg: 'yellow'
      }
     
      BK.prototype.GetInfo = function () {
        return this.options.bkg;
      }
     
      function Plugin(option) {
        return this.each(function () {
          var $this   = $(this);
          var options = $.extend({}, BK.DEFAULTS, option, typeof option == 'object' && option);
     
          $this.data('bk', new BK(this, options));
        });
      }
     
      var old = $.fn.bk
     
      $.fn.bk             = Plugin
      $.fn.bk.Constructor = BK
    }(jQuery);
     
    $('#div').bk({bkg: 'red'});
    $('#div1').bk({bkg: 'blue'});
     
    $('#btnGetSel').click(function () {
       alert($('#div1').data('bk').GetInfo());
    });

    Le principe est d'écrire une classe très classique en JS puis d'utiliser une fonction "plugin" qui va permettre d'encapsuler la classe en jQuery et d'initialiser le tout. Le principe reste simple, le tout est de stocker quelque part l'instanciation de ta classe, personnellement je le stock sur l'élément via data.

  3. #3
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Merci pour ta réponse
    Voici une autre réponse qu'on m'a donné sur un autre forum
    http://jsfiddle.net/jakecigar/szy4gj6v/2/

  4. #4
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    C'est pratiquement pareil la seule différence réside dans l'instanciation que j'effectue et qui n'est pas présent dans le deuxième exemple. Il est possible que la solution que l'on t'a proposé peut avoir certaine contrainte sur une utilisation poussé en JS, toutefois et c'est la seule remarque que j'ai à faire sur pour l'exemple proposé: pour un plugin important la lecture, la maintenance et les risques de collisions peuvent également augmenter.

  5. #5
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut
    J'ai bien vu que les 2 solutions sont proches.
    Mais ce n'est pas vraiment ce que je cherche.
    Je veux accéder vraiment à ma div et l'inspecter pour trouver l'info et pas la mettre en data.
    Je vais avoir dans cette div un tableau avec des cases à cocher et je voudrais me retourner un array des case cochées.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this)[0].style.background
    retourne bien Blue mais je trouve pas top le [0]
    et
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this).attr("style")
    me retourne background:Blue et pas Blue...

    Et suis-je obligé de faire
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
     if (typeof options === "string") { return $(this).data("BK")[options].apply(this, [].splice.call(arguments, 1)); }
    pour appeler la fonction getInfo dans Settings?

  6. #6
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Code javascrit : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(this)[0].style.background
    this.style.background

    c'est la même chose

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(this).attr("style") // Ok mais...
    $(this).css('background') // Pourquoi pas ça ?

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    if (typeof options === "string") { return $(this).data("BK")[options].apply(this, [].splice.call(arguments, 1)); }

    Ok cette solution est chiante à écrire même si je l'adore , mais pourquoi ne pas utilisé la mienne ?

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#div1').data('bk').GetInfo()

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2010, 17h39
  2. [C#] communiquer avec un composant webBrowser
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/06/2006, 10h37
  3. Réponses: 12
    Dernier message: 26/03/2006, 14h13
  4. [TComport] communiquer avec un PIC
    Par tracks dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/06/2004, 13h11
  5. Déployer une BDD avec son appli
    Par Albertolino dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 11/03/2004, 18h08

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