2015-04-13 3 views
0

Я хочу показать дерево в македонной макете. Для этого я создать модельTree view is not render in 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 
}); 

Но когда код исполняется, это не древовидная структура. Элементы следуют последовательно друг от друга.

Может ли кто-нибудь мне помочь?

С уважением, Евгений.

ответ

0

Проблема была в коде для старых версий 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, 
});