Bonjour,
Peut être qu'un tuto sur la façon de faire des classes, de manipuler les objets dans jQuery pourraient être sympathique.
J'avoue que j'ai encore un peu de mal à lire le code lorsqu'il y a des objets dans jQuery.
Merci par avance, si cette idée est retenue :)

6 réponses


Tu as un exemple de ce que tu appelle objet ?

siriu
Auteur

Bonjour,

Dans tes tutoriaux javascript, souvent tu dis "c'est un objet" et c'est écrit entre {}

Pourtant je lis bien le code PHP, AS3, mais jquery j'ai parfois du mal :(

siriu
Auteur

Bonjour,

Dans le tutoriel cakePHP jour 3 voici l'appel à un objet :

tinyMCE.init({
                mode : 'textareas',
                theme: 'advanced',
                plugins: 'inlinepopups,paste,image',
                theme_advanced_buttons1 : 'bold,italic,underline,|,bullist,numlist,|,justifyleft,justifycenter,justifyright,justifyfull,|,link,unlink,image,|,formatselect,code',
                theme_advanced_buttons2 : '',
                theme_advanced_buttons3 : '',
                theme_advanced_buttons4 : '',
                theme_advanced_toolbar_location:'top',
                theme_advanced_statusbar_location : 'bottom',
                theme_advanced_resizing : true,
                paste_remove_styles : true,
                paste_remove_spans : true,
                paste_stip_class_attributes : "all",
                image_explorer : '<?php echo $this->Html->url(array('controller'=>'medias','action'=>'index',$this->request->data'Post']'id'])); ?>',
                image_edit : '<?php echo $this->Html->url(array('controller'=>'medias','action'=>'show')); ?>',
                relative_urls : false,
                content_css : '<?php echo $this->Html->url('/css/wysiwyg.css'); ?>'
        });
        function send_to_editor(content){
                var ed = tinyMCE.activeEditor;
                ed.execCommand('mceInsertContent',false,content); 
        }

siriu, pour faire de la poo en javascript, hélas pour toi jQuery n'est pas le meilleur framework. C'est possible mais pas très intuitif.

Mais il suffit en fait d'englober ta classe dans :

jQuery(function($){
//ta classe
}):

Ensuite pour donner un nom à ta classe il faut faire :

//tes membres de ta classe
    var $var1, $var2, $var3
//tes options par défaut
    var options = {
        opt1 : 0,
        opt2 : '#000',
        opt3 : undefined    
        };

    $.fn.nomdetaclasse = function(var1,o)
    {
        $.extend(options, o)
        //$var1 recevra l'objet HTML auquel fait reference l'appel de la classe ($('IDEltHtml').maclasse(); //<- dans ce cas $var1 = IDEltHTml).
                $var1 = $(this); //Du coup on fait appel à la méthode $(''); pour être sûr de recevoir un objte jQuery.
    }

Sachant que le

$.fn.nomdetaclasse

est la fonction d'initialisation de ta classe.

A partir de là soit tu fais une classe auto et à l'initialisation tu appelles tes différentes fonctions, soit tu laisses l'utilisateur libre d'appeller tes fonctions.

Rien de très compliqué en soit. Mais c'est pas évident de rassembler les infos ...

siriu
Auteur

Super merci pour l'explication

Juste si je peux me permettre de demander une précision, dans le code suivant ou met on le nom de la classe ou comment l'inscrit t'on ?
je met $.fn.nom de ma classe là ou tu as écrit "//ta classe" ?

jQuery(function($){
//ta classe
}):

Et pour faire une classe auto, je suppose qu'il faut un constructeur non ? quel est sa syntaxe stp ?

et puis encore merci pour la réponse ;)

Oops désolé pour le temps de réponse, en fait ta classe générique ressemblera à :

jQuery(function($){
//tes membres de ta classe
    var $var1, $var2, $var3
//tes options par défaut
    var options = {
        opt1 : 0,
        opt2 : '#000',
        opt3 : undefined   
        };

    //Ici est déterminé le nom de ta classe, et c'est également le constructeur de ta classe.
    //Du coup pour une classe "auto" tu appelles tes différentes fonctions dans le constructeur, ainsi l'utilisateur n'aura qu'à faire $('Monelement').maClasse({ses:options}); et ça roulera tout seul
    $.fn.nomdetaclasse = function(o)
    {
        $.extend(options, o)
        //$var1 recevra l'objet HTML auquel fait référence l'appel de la classe ($('IDEltHtml').maclasse(); //<- dans ce cas $var1 = IDEltHTml).
                $var1 = $(this); //Du coup on fait appel à la méthode $(''); pour être sûr de recevoir un objet jQuery.
    }
}):