如何隐藏另一个CompositeView项的所有子ComposteView?

时间:2014-07-12 05:58:11

标签: tree marionette collapse

我需要隐藏某些物品的所有孩子。该结构是一个嵌套树,并使用CompositeView来做到这一点。我该怎么办才能让那棵树崩溃呢?

var ItemView = Backbone.Marionette.CompositeView.extend({
  tagName : "li",
  //...,
  onRender: function () {
    this.collection = this.model.children; // bindCollection
  },
  serializeData: function() {
    //...
  },
  events: {
    "click .tree-view-chevron": 'toggleView'
  },
  toggleView: function() {
    this.$el.toggleClass("open");
    if (!this.$el.hasClass("open")) {
      //collapse then re-render parent collectionView
    }
    else
      this.render();
    this.switchChevron();
    return false;
  },
  switchChevron: function() {
    //...
  }
});

var TreeRoot = Backbone.Marionette.CollectionView.extend({
  itemView : ItemView
  ,tagName: "ul"
  ,className: "tree-view-root"
});

1 个答案:

答案 0 :(得分:0)

我刚刚为我的“愚蠢”问题编写了解决方案:

hideChildren: function() {
  this.children.each(
        function(itemV) { 
            itemV.$el.detach();
        }
  ); 
},
toggleView: function() {

  if (this.$el.hasClass("open"))
    {
        this.hideChildren();
        this.$el.removeClass("open");
        if (this.model.hasChildren()) 
            this.ui.chevron.html(this.chevronRight);
    }
  else
    {
        this.render();
        this.$el.addClass("open");
        if (this.model.hasChildren()) 
          this.ui.chevron.html(this.chevronDown);
    }

  return false;
}

hideChildren !!!功能和崩溃在那棵树上工作。但也许有更好的方法可以做到这一点......我现在还是js的新手。