Plugin throwing TypeError after WordPress 4.5 update

后端 未结 10 1410
甜味超标
甜味超标 2020-12-07 19:06

I\'m debugging a visual composer plugin that broke after I updated WordPress to 4.5 and I can\'t figure out why it is throwing a TypeError.

The error message in the

相关标签:
10条回答
  • 2020-12-07 19:23

    Checkout below code for both $template.get is not a function and Uncaught TypeError: Cannot read property 'attributes' of undefined. Worked for me.

    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()
    }
    
    0 讨论(0)
  • 2020-12-07 19:25

    I am using the Astra theme. This fix is 99.9 % working. For some tho, this only stops the spinning wheel, but once the page loads visual composer does not.

    I made a slight change to this code (that is posted everywhere by now)

    Original Astra theme code here (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();
        },
    

    The code that works :

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

    },

    The main difference is located here (versus original code)

    }); this.$el.attr
    

    There is a semicolon instead of the original comma :) :

    }), this.$el.attr
    

    Cheers folks :) So

    0 讨论(0)
  • 2020-12-07 19:31

    I was able to resolve the issue. Turns out I was using an older version of JS composer. Updating to the newest version broke my site so I tracked down the error and updated the html2element function to

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

    All is working well for me again! Hope this helps others.

    0 讨论(0)
  • 2020-12-07 19:33

    Noticed that code was not being passed into the html2element function, but did exist in the function calling it (render)

    The following code has completely corrected my problems, I can load the page, add, clone, remove, 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;
    		},

    0 讨论(0)
提交回复
热议问题