在主干牵线木偶中有一种方法可以判断一个区域是否已经显示了一个视图?

6 backbone.js marionette

鉴于这样的事情:

View = Backbone.Marionette.ItemView.extend({ });

myView = new View();

//region already exists
myLayout.region.show(myView)

//some time later this gets called again:
myLayout.region.show(myView)
Run Code Online (Sandbox Code Playgroud)

我可以在文档中看到currentView,但这似乎只适用于初始化.显示视图后,我可以查询区域以查看视图吗?视图实例或类型都会有所帮助.看看Chrome的调试器,我看不到该区域的任何属性/方法会有所帮助.

想要这样做的动机是,如果已经显示,则我不再显示区域中的静态项目视图,因为这可以(特别是如果涉及图像)导致屏幕上的轻微闪烁效果.

谢谢

--Justin Wyllie

evi*_*ive 11

您可以在调用show方法之前添加条件:

if (myLayout.region.currentView != myView)
    myLayout.region.show(myView)
Run Code Online (Sandbox Code Playgroud)

因此,如果您尝试show使用相同的电话,View它将无法显示.

如果您想以region.show(myView)这种方式办理入住手续,请致电:

if (_.isUndefined(myLayout.region.currentView))
    myLayout.region.show(myView)
Run Code Online (Sandbox Code Playgroud)


Cra*_*g J 7

您可以检查视图的属性isClosed$el属性.就像是

if (myView.isClosed || _.isUndefined(myView.$el)) {
  myLayout.region.show(myView);
}
Run Code Online (Sandbox Code Playgroud)

这与区域检查视图是否关闭的方式相同:

show: function(view) {

  this.ensureEl();

  var isViewClosed = view.isClosed || _.isUndefined(view.$el);
  ...
Run Code Online (Sandbox Code Playgroud)

  • 如果这回答了您的问题,请将其标记为已接受. (4认同)