it-swarm.com.de

Plugin, das TypeError nach dem Update von Wordpress 4.5 auslöst

Ich debuggen ein Visual Composer-Plugin, das nach dem Update von Wordpress auf 4.5 kaputt ging und ich nicht herausfinden kann, warum es einen TypeError auslöst.

Die Fehlermeldung in der Konsole:

JQMIGRATE: Migrate is installed, version 1.4.0              load-scripts.php?....
Uncaught TypeError:     $template.get is not a function     composer-view.js?ver=4.1.1.1:73

Die einzigen Vorkommen von $template sind im folgenden Code zu finden. Ich verstehe, dass dies nicht sehr viel Kontext ist, aber wie kann ich diesen Fehler beheben?

/**
 * Convert html into correct element
 * @param html
 */
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) { // **errors on this line**
    attributes[attr.name] = attr.value;
  });
  this.$el.attr(attributes).html($template.html());
  this.setContent();
  this.renderContent();
},


Aktualisieren:

Es sieht so aus, als könnte dies ein Problem mit jQuery sein. Wordpress 4.5 enthält jQuery 1.12, durch das ein Fehler behoben wurde, durch den bestimmter Code mit falscher Syntax ausgeführt werden konnte. Ich gehe davon aus, dass der Plugin-Code eine falsche Syntax hatte, aber bis jetzt trotzdem lief.

https://wordpress.org/support/topic/read-this-first-wordpress-45-master-list#post-8271654

47
spencer.sm

Ich konnte das Problem lösen. Es stellte sich heraus, dass ich eine ältere Version von JS Composer verwendet habe. Durch die Aktualisierung auf die neueste Version wurde meine Website beschädigt, sodass ich den Fehler aufgespürt und die html2element-Funktion auf aktualisiert hat 

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()
        },

Alles funktioniert wieder gut für mich! Hoffe das hilft anderen.

118
Ben

Ich habe immer noch diese Fehlermeldung erhalten, nachdem ich den Patch in Bens Antwort ausprobiert hatte: Uncught TypeError: Kann die Eigenschaft 'custom' von undefined nicht lesen

Also habe ich das html2element in composer-view.js wie folgt geändert: 

 html2element: function(html) {
        var $template, attributes = {},
            template = html;

        $template = $(template(this.model.toJSON()).trim());
        if($template.get(0))
        {
            _.each($template.get(0).attributes, function(attr) {
            attributes[attr.name] = attr.value
        })};

        this.$el.attr(attributes).html($template.html()),
        this.setContent(),
        this.renderContent()
    },
33
ECC-Dan

@Ben Das funktioniert perfekt!

Ursache: Der Administrator hat den korrekten visuellen Editor für js_composer-Plugin nach der Aktualisierung dieser Plugins nicht geladen.

================================================== ===

Error:

Fehler: TypeError: $ template.get ist keine Funktion Quelldatei: WP-Content/plugins/js_composer_salient/assets/js/dist/backend.min.js? Ver = 4.10 Zeile: 4047

================================================== ===

Lösung Gehe zu Datei /wp-content/plugins/js_composer_salient/assets/js/dist/backend.min.js um Zeile 4045:

======> Ersetzen Sie den Code ========================================= ==============

    html2element: function(html) {
        var $template, attributes = {};
        _.isString(html) ? (this.template = _.template(html), $template = $(this.template(this.model.toJSON(), vc.templateOptions["default"]).trim())) : (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()
    },

======> Durch diesen Code ersetzen ======================================== =

    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()
    },
18
Didierh

Festgestellt, dass Code nicht an die Funktion html2element übergeben wurde, aber in der aufrufenden Funktion vorhanden war (render).

Der folgende Code hat meine Probleme vollständig behoben. Ich kann die Seite laden, hinzufügen, klonen, entfernen, 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;
		},

5
Amritosh pandey

Ich verwende das Thema Applay (2.1.3, etwas veraltet). Ich habe gerade WP und alle Plugins auf die neueste Version (4.5.2) aktualisiert und bin auch zu diesem Problem gekommen. Ich habe den Fluss dieser Komponente (js_composer) nicht analysiert, nur diese "defekte" Funktion (sie ist nicht wirklich defekt). Mir wurde klar, dass this.template und $ template falsche Objekttypen erhalten (es ist eine weitere Überprüfung neben _.isString(html) erforderlich). Ich habe es gelöst, indem ich einen try & catch-Block wie folgt hinzugefügt habe:

ORIGINAL

    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();
    },

GEÄNDERT

    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();
    },
4

Ich verwende das Astra-Thema. Dieses Update funktioniert zu 99,9%. Für einige hält das nur das drehende Rad an, aber wenn die Seite nicht geladen wird, wird der visuelle Komponist nicht mehr geladen. 

Ich habe eine kleine Änderung an diesem Code vorgenommen (der inzwischen überall veröffentlicht wird) 

Ursprünglicher Astra-Theme-Code hier (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();
    },

Der Code, der funktioniert:

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()

},

Der Hauptunterschied befindet sich hier (gegenüber dem ursprünglichen Code)

}); this.$el.attr

Es gibt ein Semikolon anstelle des ursprünglichen Kommas :):

}), this.$el.attr

Cheers Leute :) So

3
Renegade_Mtl

Ich habe diese Modifikation vorgenommen, die auf meinem WP 4.8.1 (PHP7) funktioniert.

in der Datei WP-Content/Plugins/js_composer/assets/js/backend/composer-view.js

sie müssen die render Methode ändern:

diese Zeile ersetzen

this.html2element(_.template($shortcode_template_el.html(), this.model.toJSON())); 

von dieser Linie

this.html2element( $shortcode_template_el.html() );

Es scheint, dass die _.template () - Funktion nicht einwandfrei funktioniert und kein gutes Objekt zurückgibt. Geben Sie daher stattdessen den HTML-Code an.

1
sly63

Checkout unter dem Code für $ template.get ist keine Funktion und Uncought TypeError: Eigenschaftsattribute von undefined können nicht gelesen werden. Arbeitete für mich.

html2element: function(html) {
    var $template, attributes = {},
            template = html;

        $template = $(template(this.model.toJSON()).trim());
        if($template.get(0))
        {
            _.each($template.get(0).attributes, function(attr) {
            attributes[attr.name] = attr.value
        })};

        this.$el.attr(attributes).html($template.html()),
        this.setContent(),
        this.renderContent()
}
1
Amit Garg

Nun, ich habe die Lösung auf dieser Site gefunden: https://wordpress.org/support/topic/visual-composer-is-not-working

zuerst: edit html2element: .... in /wp-content/plugins/js_composer/assets/js/backend/composer-view.js 

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()},

zweitens: Wenn Sie jedoch den Frontend-Editor öffnen, haben Sie diese Ausgabe in custom_views.js: 101 und Zeile 467 einer anderen Datei. Ich habe den Namen vergessen, aber ich denke es könnte frontend_editor.js sein.

bearbeiten in:\wp-content\plugins\js_composer\assets\js\frontend_editor \

  • frontend_editor.js
  • custom_views.js

Falscher Code:

this.$controls = $( _.template( template, data, _.extend( {},
            vc.template_options,
            { evaluate: /\{#([\s\S]+?)#}/g } ) ).trim() ).addClass( 'vc_controls' );

Fester Code:

this.$controls = $( _.template( template, data, _.extend( {},
            vc.template_options,
            { evaluate: /\{#([\s\S]+?)#}/g } ) )().trim() ).addClass( 'vc_controls' );

drittens: Siehe die schwarze Magie.

Prost.

1
Sebastian Diaz

aktualisieren Sie Ihr Design. Gehen Sie zu Darstellung> Designs und suchen Sie nach einem Update. Dadurch wurde das Problem bei der Aktualisierung automatisch behoben.

Der Fehler tritt auf, wenn Sie ein Update auf WP 4.5 durchführen, um das Nimva-Design auszuführen.

0
Robert Spencer