web-dev-qa-db-fra.com

Uncaught TypeError: $ template.get n'est pas une fonction

Je reçois cette erreur dans WordPress lorsque j'utilise un plugin appelé WpBakery Visual Composer.

J'utilise la dernière version de WordPress (4.5), ainsi que la dernière version de Google Chrome et tous les plugins sont mis à jour. Je ne peux pas sembler pouvoir ajouter tous les éléments ou modèles utilisant Visual Composer.

Quelqu'un peut-il m'aider ou me dire ce qui pourrait se passer et comment je peux corriger cette erreur?.

L'erreur que je reçois:

enter image description here

39
roykasa

S'il vous plaît voir ma réponse ici.

J'ai corrigé ce bug en mettant à jour le html2element fonction pour:

html2element: function(html) {
        var $template, attributes = {},
            template = html;
        $template = $(template(this.model.toJSON()).trim()), _.each($template.get(0).attributes, function(attr) {
            attributes[attr.name] = attr.value
        }), this.$el.attr(attributes).html($template.html()), this.setContent(), this.renderContent()
    },

dans /wp-content/plugins/js_composer/assets/js/backend/composer-view.js

ou dans wp-content/plugins/js_composer/assets/js/dist/backend.min.js`

J'espère que cela fonctionne pour toi!

98
Ben

@ Sorin Haidau

Salut les gars, j'utilise le thème Astra. Ce correctif fonctionne à 99,9%. Pour certains, cela ne fait que stopper la roue qui tourne, mais une fois que la page se charge, visual composer ne le fait pas).

J'ai légèrement modifié ce code (qui est maintenant affiché partout)

Code du thème Astra original ici (composer-view.js)

        html2element:function (html) {
        var attributes = {},
            $template;
        if (_.isString(html)) {
            this.template = _.template(html);
            $template = $(this.template(this.model.toJSON()).trim());
        } else {
            this.template = html;
            $template = html;
        }
        _.each($template.get(0).attributes, function (attr) {
            attributes[attr.name] = attr.value;
        });
        this.$el.attr(attributes).html($template.html());
        this.setContent();
        this.renderContent();
    },

Le code qui fonctionne:

html2element: function(html) {
    var $template, 
    attributes = {},
    template = html;
    $template = $(template(this.model.toJSON()).trim()), 
     _.each($template.get(0).attributes, function(attr) {
    attributes[attr.name] = attr.value
}); this.$el.attr(attributes).html($template.html()), this.setContent(), this.renderContent()
},

La principale différence est située ici (par rapport au code d'origine)

}); this.$el.attr

Il y a un point-virgule à la place de la virgule d'origine :):

}), this.$el.attr

Salut les gens :)

Mise à jour: Cette correction concerne environ 19 sites sur 20 que j'ai sur le thème astra avec la même erreur que celle mentionnée ci-dessus ... tous sauf un site.

J'ai eu cette erreur après le visuel composer est enfin apparu (il manque la moitié des éléments graphiques)

Uncaught Error: Syntax error, unrecognized expression: .ui-tabs-nav [href=#tab-1415196282-1-8]

J'ai résolu ce problème en mettant à jour la ligne 552 de composer-custom-views.js:

$('.ui-tabs-nav [href="#tab-' + params.tab_id + '"]').text(params.title);

Et voilà, tout fonctionne maintenant. Je suis désolé si cela ne fonctionne pas pour tous les thèmes, essayez d'utiliser le code mentionné par d'autres ci-dessus. Si cela ne fonctionne pas essayez mes solutions :)

21
Renegade_Mtl

Quelqu'un a posté sur le WordPress forums cette solution qui a fonctionné pour moi.

Remplace le html2element fonction dans /wp-content/plugins/js_composer/assets/js/backend/composer-view.js avec les suivants.

html2element: function(html) {
            var $template, attributes = {},
                template = html;
            $template = $(template(this.model.toJSON()).trim()), _.each($template.get(0).attributes, function(attr) {
                attributes[attr.name] = attr.value
            }), this.$el.attr(attributes).html($template.html()), this.setContent(), this.renderContent()
        },

Edit: je devais faire ce remplacement une seconde fois dans différentes circonstances, et il ne commençait pas à fonctionner tant que je ne l’avais pas désactivé puis réactivé à la fois le plug-in visuel Composer) et Ultimate Visual Composer add-on.

16
Elon Zito

A remarqué que le code n'était pas passé dans la fonction html2element, mais existait dans la fonction l'appelant (rendu)

Le code suivant a complètement corrigé mes problèmes, je peux charger la page, ajouter, cloner, supprimer, etc.

render: function () {
                        var $shortcode_template_el = $( '#vc_shortcode-template-' + this.model.get( 'shortcode' ) );
                        if ( $shortcode_template_el.is( 'script' ) ) {
                                var newHtmlCode =  _.template( $shortcode_template_el.html(),
                                                                                                this.model.toJSON(),
                                                                                                vc.templateOptions.default );
                                if(!_.isString(newHtmlCode)){
                                        newHtmlCode = $shortcode_template_el.html();
                                }
                                this.html2element( newHtmlCode );
                        } else {
                                var params = this.model.get( 'params' );
                                $.ajax( {
                                        type: 'POST',
                                        url: window.ajaxurl,
                                        data: {
                                                action: 'wpb_get_element_backend_html',
                                                data_element: this.model.get( 'shortcode' ),
                                                data_width: _.isUndefined( params.width ) ? '1/1' : params.width,
                                                _vcnonce: window.vcAdminNonce
                                        },
                                        dataType: 'html',
                                        context: this
                                } ).done( function ( html ) {
                                        this.html2element( html );
                                } );
                        }
                        this.model.view = this;
                        this.$controls_buttons = this.$el.find( '.vc_controls > :first' );
                        return this;
                },
2
Amritosh pandey

C'est drôle ... mon numéro de version visuel composer était bien supérieur à la dernière mise à jour (4.8. *).

Quoi qu'il en soit ... J'ai eu le même problème et les réponses précédentes ne résolvaient pas complètement mes problèmes, alors j'ai décidé d'essayer d'acheter un nouvel exemplaire du brancher. Cela a bien fonctionné.

Je peux maintenant confirmer que Visual Composer version 4.12.1 fonctionne avec WordPress 4.6.1 sans erreur.

Notez également ceci:

Il n’existe pas de répertoire tel que backend ou un fichier appelé composer-view.js Dans la dernière version de Visual Composer.

PS. Utiliser ces constructeurs de pages GUI est nul.

2
Shamppi

cela a fonctionné pour moi pour WordPress version 4.9.8

html2element:function (html) {
    var attributes = {}, 
        $template;
    if (_.isString(html)) {
        this.template = _.template(html);
    } else {
        try {
            this.template = _.template(html());                                                                                                                          
        } catch (err) {
            this.template = html;
        }   
    }   
    $template = $(this.template(this.model.toJSON()).trim());
    _.each($template.get(0).attributes, function (attr) {
        attributes[attr.name] = attr.value;
    }); 
    this.$el.attr(attributes).html($template.html());
    this.setContent();
    this.renderContent();
},
0
PKInd007

un dernier correctif en décembre 2016, pour Visual composer correctif est-ce,

html2element:function(html){var $template,attributes={},template=vc.template(html);$template=$(template(this.model.toJSON()).trim()),_.each($template.get(0).attributes,function(attr){attributes[attr.name]=attr.value}),this.$el.attr(attributes).html($template.html()),this.setContent(),this.renderContent()},

remarquez cette chose importante, template = vc.template (html); dans le code actuel. Ceci est la solution rapide dans la dernière version, compatible avec WPordpress.

N'oubliez pas de mettre à jour Wordpress et le thème en conséquence, ce correctif devrait donc fonctionner correctement).

merci et bon codage

0
mindlogixtech