【问题标题】:Tree view is not rendering in Backbone Marionette树形视图未在 Backbone Marionette 中呈现
【发布时间】:2015-04-13 14:01:45
【问题描述】:

我想在 Backbone Marionette 中显示树。 为此我创建了一个模型

applicationManager.Models.menuItem = Backbone.Model.extend({

    initialize: function(){

        var 
        children = this.get('children');

        if (children){

            this.children = new applicationManager.Collections.menu(children);
            this.unset('children');
        }
    }     
});

一个集合

applicationManager.Collections.menu = Backbone.Collection.extend({

    model: applicationManager.Models.menuItem,
    url: '/en/panel/menu'
});

递归视图

applicationManager.Views.menuItem = Backbone.Marionette.CompositeView.extend({

    tagName: 'li',
    template: '#menu-template',
    initialize: function(){

        this.collection = this.model.children;
    },
    appendHtml: function(collectionView, childView) {

        collectionView.$('ul:first').append(childView.el);
    },
    onRender: function() {

        if (_.isUndefined(this.collection)){

            this.$('ul:first').remove();
        }
    }
});

和根视图

applicationManager.Views.menu = Backbone.Marionette.CollectionView.extend({

    tagName: 'ul',
    childView: applicationManager.Views.menuItem
});

我的申请代码是

var 
menu = new applicationManager.Collections.menu();

menu.on('reset', function(data){

    var
    view = new applicationManager.Views.menu({

        collection: data
    });

    applicationManager.getRegion('menuRegion').show(view);
});

menu.fetch({

    reset: true
});

但是当代码执行时,它不是树形结构。元素彼此连续。

谁能帮帮我?

最好的问候,Evgeniy。

【问题讨论】:

    标签: backbone.js marionette


    【解决方案1】:

    问题出在旧版 Marionette 的代码中。

    现在我用这个

    applicationManager.Views.menuItem = Backbone.Marionette.CompositeView.extend({
    
        tagName: 'ul',
        template: '#menu-template',
    
        initialize: function(){
    
            this.collection = this.model.children;
        },
        attachHtml: function(collectionView, childView){
    
            collectionView.$('li:first').append(childView.el);
        }
    });
    
    applicationManager.Views.menu = Backbone.Marionette.CollectionView.extend({
    
        childView: applicationManager.Views.menuItem,
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多