如何检查主干视图是否已渲染

How to check if a backbone view is rendered?

本文关键字:是否 视图 何检查 检查      更新时间:2023-09-26

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

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

修复if(viewContainer.empty()){

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

我使用toggle功能将此视图附加到viewContainer,但是,每次单击按钮时,myView都会一次又一次地附加到viewContainer,而不是仅附加一次。在附加视图之前,如何检查视图是否已在其中渲染?我能用!this.rendered()吗?

我找到了这个线程,但在这种情况下它对我没有帮助。

UPDATE-FROM 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"]

从外观上看,如果ProductsView已经存在,您需要确保它没有被创建。

最简单的方法是:

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

处理应用程序状态比查询DOM更好。删除产品视图后,只需执行this.myView = null即可。


您唯一想查询DOM以了解视图是否被渲染的时候,可能是当您必须集成一个孤立的外部应用程序时,您无法控制该应用程序在渲染时不会触发任何事件/提供回调等。