未捕获的TypeError:$ template.get不是函数

时间:2016-04-15 08:07:09

标签: javascript jquery wordpress

当我使用名为WpBakery Visual Composer的插件时,我在WordPress中收到此错误。

我使用的是最新版本的WordPress(4.5),使用最新的Google Chrome版本,所有插件都已更新。我似乎无法使用Visual Composer添加任何元素或模板。

有人可以帮助我或告诉我可能会发生什么以及如何解决此错误。

我得到的错误:

enter image description here

8 个答案:

答案 0 :(得分:97)

请参阅我的回答here.

我通过将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() }, 函数更新为:

来修复此错误
/wp-content/plugins/js_composer/assets/js/backend/composer-view.js
row_idx = np.searchsorted(lookup_array[:,0],key_set)[key_set.argsort()] values = lookup_array[row_idx,1]

中的

或在wp-content / plugins / js_composer / assets / js / dist / backend.min.js`

希望这适合你!

答案 1 :(得分:21)

@Sorin Haidau

大家好,我正在使用Astra主题。此修复程序的工作率为99.9%。对于某些人来说,这只会停止旋转轮,但一旦页面加载,视觉作曲家就不会。

我对这段代码做了一些改动(到现在为止已经发布了)

这里的原创Astra主题代码(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();
    },

有效的代码:

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

主要区别在于此处(与原始代码相比)

}); this.$el.attr

有一个分号而不是原始的逗号:):

}), this.$el.attr

欢呼人们:)

更新:这修复了我使用主题astra的20个网站中的19个,其中包含与上述相同的错误...除了一个网站以外的所有网站。

我在视觉作曲家终于出现之后出现了这个错误(缺少一半的设计元素)

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

我通过更新composer-custom-views.js的第552行来解决这个问题:

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

并且现在一切正常。对不起,如果它不适用于所有主题,请尝试使用上面其他人提到的代码。如果这不起作用,请尝试我的解决方案:)

答案 2 :(得分:16)

有人在WordPress论坛上发布了这个对我有用的解决方案。

使用以下内容替换html2element中的/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()
        },

编辑:我不得不在不同情况下第二次进行此替换,直到我禁用然后重新启用Visual Composer插件 Ultimate Visual Composer之后它才开始工作插件。

答案 3 :(得分:2)

注意到代码没有被传递到html2element函数,但是在调用它的函数中确实存在(渲染)

以下代码已完全纠正了我的问题,我可以加载页面,添加,克隆,删除等



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




答案 4 :(得分:2)

有趣的是......我的视觉作曲家版本号远远高于最新版本(4.8。*)。

无论如何......我遇到了同样的问题,之前的答案并没有完全解决我的问题,所以我决定尝试购买该插件的新副本。结果很好。

我现在可以确认Visual Composer 4.12.1版本与WordPress 4.6.1一起使用没有错误。

另请注意:

在最新版本的Visual Composer中没有backend这样的目录或名为composer-view.js的文件。

PS。使用这些GUI页面构建器很糟糕***。

答案 5 :(得分:0)

2016年12月的最新修补程序,对于Visual composer fix来说就是这个,

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

注意这个重要的事情,实际代码中的 template = vc.template(html); 。这是最新版本的快速修复,与WPordpress最新版本兼容。

请记住相应地更新Wordpress和主题,因此此修复程序应该可以正常工作。

感谢和快乐的编码

答案 6 :(得分:0)

这适用于WordPress 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();
},

答案 7 :(得分:-2)

对于任何人来自谷歌搜索: 更改html2element函数后,如果您有此错误 无法读取属性'属性' 更新渲染:函数到下面的代码

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