BackboneJS 没有创建包装器 div

BackboneJS not creating the Wrapper div

我正在创建一个简单的 backbone 模板弹出窗口。 Backbone 没有创建它应该创建的 Wrapping <div> 元素。生成模板时,不会生成 <div class="theme-overlay">。 Backbone 从没有任何包装的模板中转储 html。

我四处搜索,但没有发现任何类似的问题。我对 Backbone 很陌生,所以我想我遗漏了一些东西。

注意: 我正在使用 WordPress 环境,这就是为什么有一个 wp 全局变量 wp.Backbone 是 [=16= 的内部改编] 以避免与 PHP 冲突。使用 Backbone.View.extend() 而不是 wp.Backbone.View.extend() 得到相同的结果。

在下面查找代码

window.wp = window.wp || {};

(function($){
    var importer = {};
    importer.data = _kallzuDemoSettings;
    _.extend( importer, { model: {}, view: {}, routes: {}, router: {}, template: wp.template });

    importer.View = wp.Backbone.View.extend({
        template: wp.template('demo'),
        el: '#theme-overlay',
        className: 'theme-overlay',
        events: {
            'click .close' : 'collapse'
        },
        render: function(demo_title){

            var data = _.find(importer.data.demos, function(item){
                return item.name == demo_title;
            });

            if( data == undefined ){
                alert( 'No data found!');
                return;
            }

            this.$el.html( this.template( data ) ); // insert into dom
        },
        collapse: function( event ) {

            var self = this;

            event = event || window.event;

            if ( $( event.target ).is( '.close' ) ) {

                // Add a temporary closing class while overlay fades out
                $( 'body' ).addClass( 'closing-overlay' );

                // With a quick fade out animation
                this.$el.fadeOut( 130, function() {
                    // Clicking outside the modal box closes the overlay
                    $( 'body' ).removeClass( 'closing-overlay' );
                    // Handle event cleanup
                    self.closeOverlay();
                });
            }

        },

        closeOverlay: function() {
            $( 'body' ).removeClass( 'modal-open' );
            this.remove();
            this.unbind();
            this.trigger( 'importer:collapse' );
        },
    });

    window.installDemo = function( demo_title ){
        var view = new importer.View();
        view.render( demo_title );
    }

})(jQuery);

我认为脚本的其他部分(如模板)没有必要显示。但是,如果您需要它们,请在评论中告诉我。

您应该删除 el: '#theme-overlay' 并在初始化之后将视图附加到它。

window.installDemo = function( demo_title ){
    var view = new importer.View();
    view.$el.appendTo('#theme-overlay')
    view.render( demo_title );
}

这样,您的包装器 div 将被创建,然后附加到 div。

DOM 应该看起来像:

<div id="theme-overlay">
    <div class="theme-overlay"><!-- your rendered content --></div>
</div>