web-dev-qa-db-fra.com

Composant Joomla inclure JavaScript, erreur pop

Je suis nouveau dans Joomla. J'ai essayé de construire mon composant Joomla. Cependant, lorsque j'essaie d'inclure la bibliothèque JTery ptTimeSelect dans le frontal, il affiche une erreur javascript.

Uncaught TypeError: impossible de lire la propriété '_doCheckMouseClick' de non définie

J'ai beaucoup fait google, et ai changé la place du code, il semble que Joomla automatic ignore une partie du code, ce qui cause ce problème peut-être qu'il saute un code avec un trait de soulignement "_"), et j'ai essayé de renommer _doCheckMouseClick en doCheckMouseClick, il affiche le même message d'erreur.

voici l'erreur de code pops

fonction appelante: ligne 228 du fichier

 $(document).mousedown(jQuery.ptTimeSelect._doCheckMouseClick);  

définir la fonction: ligne 387 dans le fichier

 /**
 * Closes the timePicker popup if user is not longer focused on the
 * input field or the timepicker
 * 
 * @private
 * @param {jQueryEvent} ev -    Event passed in by jQuery
 * @return {undefined}
 */
jQuery.ptTimeSelect._doCheckMouseClick = function(ev){
    if (!$("#ptTimeSelectCntr:visible").length) {
        return;
    }
    if (   !jQuery(ev.target).closest("#ptTimeSelectCntr").length
        && jQuery(ev.target).not("input.isPtTimeSelectActive").length ){
        jQuery.ptTimeSelect.closeCntr();
    }

};// jQuery.ptTimeSelect._doCheckMouseClick

S'il vous plaît aider

1
user3508896

Après quelques essais, j'ai découvert que Joomla avait un bogue avec la bibliothèque include JavaScript, et je résous ce problème en copiant le code directement dans le modèle d'affichage/par défaut, en utilisant

<?php
$document = JFactory::getDocument();
$document->addScriptDeclaration("
  //300 lines of ptTimeSelect code
")

J'espère que cela aidera d'autres personnes qui rencontrent le même problème.

1
user3508896

Je pense que le problème est lié au fait que le DOM peut ne pas être prêt au moment de l'appel de la méthode. Un autre problème est que Joomla utilise encore Mootools pour une grande partie de la fonctionnalité principale côté client, qui utilise également le $ comme point d’entrée de la bibliothèque. Vous pouvez utiliser une expression IIFE (Immediateely Instantiated Function Expression) pour gérer cela de manière créative en combinaison avec l'événement jQuery ready. Commencez par ajouter la version de jQuery fournie avec Joomla en exécutant la méthode suivante:

JHtml::_('jquery.framework');

Ensuite, enveloppez votre code jQuery comme suit:

(function($) {
    $(document).ready(function(){

        // Insert code here, using $ instead of jQuery

    });
}(jQuery));

Cela devrait permettre à la fonction d'être appelée.

1
Brian Bolli

J'ai le même problème avec Zoo Component dans la zone d'administration après la mise à jour de Joomla vers 3.4.8.

Je résous cette mise à jour de la bibliothèque Zoo jquery en:

/media/Zoo/libraries/jquery
0
Max