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 :

[VUE.JS] R�cup�ration de variable � partir de @change


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2014
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activit� : autre

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par d�faut [VUE.JS] R�cup�ration de variable � partir de @change
    Bonjour,

    je pense que je n'ai pas encore de recul suffisant sur vue.js pour le r�soudre moi-m�me (3 ou 4 jours de pratique) et je viens vous demander un peu d'aide sur un bout de code (html, JS, vue.js).

    le script en question est sens� g�n�rer une liste de checkbox et faire en sorte que, s'il y a 3 checkbox de coch�es, il grise les checkbox non-coch�es.
    il est aussi capable de g�rer l'ordre des choix : si on d�coche un choix pour le remplacer par un autre cela n'affecte pas l'ordre des choix suivants.

    Code html : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="https://unpkg.com/[email protected]"></script>
      </head>
      <body>
      	<div id="app"><!--app=> "montage du script"-->
          <div class="list-of-yards">
            <label v-for="yard in yards">
     
              <!--:disabled et @change contiennent "un bout de code en JS" mais @change devrait contenir "changeThis(yard.id, yard.selected)"-->
              <!--Là c'est très moche !!!-->
     
              <p><input type="checkbox" v-model="yard.selected" :disabled="count == 3 && !yard.selected" @change="
              if(yard.selected){
                 list.splice(list.indexOf(null), 1, yard.id);
                 count++;
             } else {
                 list.splice(list.indexOf(yard.id), 1, null);
                 count--;
             }
              "> {{yard.name}}   {{yard.selected}}</p>
            </label>
              <p>list : {{list}}</p>
              <p>counter : {{count}}</p>
          </div>
        </div>
    	<script type="text/javascript">
                    new Vue({
                      el: '#app',
            // ici ce sont les données 
            // ("data: function()" juste à cause du v-for="yard in yards", du format de yards et une histoire sur le fonctionnement des checkbox...)
                              data: function() {
                                return {
                // ma liste de checkbox (id,nom,état)
                                  yards: [
                                    {id: 1, name: 'test 1', selected: false},
                                    {id: 2, name: 'test 2', selected: false},
                                    {id: 3, name: 'test 3', selected: false},
                                    {id: 4, name: 'test 4', selected: false},
                            {id: 5, name: 'test 5', selected: false},
                            {id: 6, name: 'test 6', selected: false}
                                  ],
                // ma liste de mes checkbox cochées sert entre autre à capturer l'ordre des cases cochées
                // sert aussi quand on décoche une checbox sur le premier choix de remplacer par une autre.
                                    list: [null,null,null],
                // permet juste de compter les checbox coché pour griser les non-coché
                            count: 0
                                };
                              },
            // ici se trouve tout les traitement sur les évènement (methode marche mais computed est conseillé)
            computed: {
     
              //ma fameuse fonction
               changeThis: function(id, selected) {
     
                // J'arrive pas à faire passer id et selected (@change="changeThis(yard.id, yard.selected)" en théorie)
                // Du coup id = objet, selected = undefined (???)
                // Et pour finir "changeThis is not a function"
                // alors qu'il commence à l'exécuter : count-- ( bug ? & ???)
     
                // code que j'aurais voulu implanter en théorie.
     
                /*if(selected){
                   Vue.set(this.list, this.list.indexOf(null), id);
                   this.count++;
                } else {
                   Vue.set(this.list, this.list.indexOf(id), null);
                   this.count--;
                }*/
     
              }
           }
         });
     
     
            </script>
      </body>
    </html>

    Bref, comme montre les commentaires du code, j'essaie d'enlever le gros JS moche dans le param�tre @change.

    Ps : si vous n'avez pas tout compris l'explication, le script fonctionne tel qu'il est en ce moment.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2014
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activit� : autre

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par d�faut
    Citation Envoy� par ManuelCQE Voir le message
    Bonjour,

    je pense que je n'ai pas encore de recul suffisant sur vue.js pour le r�soudre moi-m�me (3 ou 4 jours de pratique)
    je viens de trouver ma r�ponse :

    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
              <p><input type="checkbox" v-model="yard.selected" :disabled="count == 3 && !yard.selected" @change="changeThis((yard.id, yard.selected)"> {{yard.name}}   {{yard.selected}}</p>


    en fait il faut retourner la fonction � @change de cette fa�on :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
               changeThis: function(id, selected) {
                  return function(id, selected){
                    if(selected){
                         this.list.splice(this.list.indexOf(null), 1, id);
                         this.count++;
                     } else {
                         this.list.splice(this.list.indexOf(id), 1, null);
                         this.count--;
                     }
                  }
              }

  3. #3
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut


    J'ai pris le temps de tester votre code, car je n'ai jamais utilis� vue.js jusqu'� aujourd'hui.

    @change me donne une erreur dans la console (touche F12) Firefox. Avec v-on:change c'est bon :

    Code HTML : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Vue, test 1</title>
        <script src="https://unpkg.com/[email protected]"></script>
      </head>
      <body>
      	<div id="app">
          <div class="list-of-yards">
            <label v-for="yard in yards">
              <p>
                <input type="checkbox" v-model="yard.selected" v-on:change="changeThis(yard.id, yard.selected)" :disabled="count == 3 && !yard.selected">
                {{yard.name}} {{yard.selected}}
              </p>
            </label>
            <p>
              list : {{list}}
            </p>
            <p>
              counter : {{count}}
            </p>
          </div>
        </div>
        <script>
          new Vue({
            el: '#app',
            data: function() {
              return {
                yards: [
                  { id: 1, name: 'test 1', selected: false },
                  { id: 2, name: 'test 2', selected: false },
                  { id: 3, name: 'test 3', selected: false },
                  { id: 4, name: 'test 4', selected: false },
                  { id: 5, name: 'test 5', selected: false },
                  { id: 6, name: 'test 6', selected: false }
                ],
                list: [ null, null, null ],
                count: 0
              };
            },
            computed: {
              changeThis: function( id, selected ) {
                 return function( id, selected ){
                   if ( selected ){
                      this.list.splice( this.list.indexOf( null ), 1, id );
                      this.count++;
                    } else {
                      this.list.splice( this.list.indexOf( id ), 1, null );
                      this.count--;
                    }
                 }
               }
            }
          });
        </script>
      </body>
    </html>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [XL-2003] Probl�me pour renommer un fichier � partir d'une variable contenu dans une cellule
    Par the-geut dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 17/05/2010, 11h43
  2. Probl�me pour d�placer une ligne � partir d'une variable
    Par Cadenwarr dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 20/01/2008, 12h12
  3. R�ponses: 49
    Dernier message: 13/03/2006, 11h25
  4. [XSL]Probl�me de port�e des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    R�ponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [JSP][d�butant] recup�rer des variables...
    Par yass dans le forum Servlets/JSP
    R�ponses: 6
    Dernier message: 08/04/2004, 11h05

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