如何检查骨干视图是否呈现?

时间:2016-03-30 13:00:08

标签: javascript backbone.js view

我正在尝试使用以下代码将视图附加到Backbone中的项目:

var viewContainer = this.$el.find('.view-container'),
  pageWrap = this.$el.nextAll();
  
    
      

FIX           if(viewContainer.empty()){

    
  
  this.myView= new ProductsView();
    viewContainer.append(application.myView.render().$el),
    console.log(myView);
}

我使用viewContainer功能将此视图附加到toggle,但是,每次点击按钮时,myView会一次又一次地附加到viewContainer而不是只有一次。在附加视图之前,如何检查视图是否已在其中呈现?我可以使用!this.rendered()等价物吗?

我发现了这个thread,但在这种情况下它没有帮助我。

  
    
      
        

UPDATE - 来自console.log(viewContainer)

      
    
  

[div.view-container.product-container.active, div#subjects_menu.view-container.product-container.hidden.active, prevObject: p.fn.p.init[1], context: undefined, selector: ".view-container"]

1 个答案:

答案 0 :(得分:0)

从它的外观来看,你想确保ProductsView如果已经存在则不会被创建。

最简单的方法是:

if(!this.myView) {
  this.myView= new ProductsView();
  viewContainer.append(application.myView.render().$el),
}

最好使用应用程序状态而不是查询DOM。删除产品视图后,只需执行this.myView = null

您唯一想要查询DOM以了解视图是否已呈现的时间可能是您必须集成一个隔离的外部应用程序,在该应用程序中,您无法控制,在触摸时不会触发任何事件/提供回调等