Javascript 测试木偶布局视图中是否缺少区域元素

Javascript 测试木偶布局视图中是否缺少区域元素,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,在木偶中是否有一种优雅的方法来测试视图渲染后DOM中是否存在区域(el)元素?最好不用重写区域选择器和使用jQuery搜索DOM 例如-此布局视图: var view = new Marionette.LayoutView({ regions : { 'header' : '.header', 'footer' : '.footer' }, onRender : function() { if ( /* test for the existance of 'header'

在木偶中是否有一种优雅的方法来测试视图渲染后DOM中是否存在区域(el)元素?最好不用重写区域选择器和使用jQuery搜索DOM

例如-此布局视图:

var view = new Marionette.LayoutView({

 regions : {
  'header' : '.header',
  'footer' : '.footer'
 },

 onRender : function() {
  if ( /* test for the existance of 'header' in the dom */ ) {
   // do something
  }
 }

});

优雅?否。但是当元素存在时,木偶的
视图.getRegion()。\u ensureElement()
返回true,如果元素不存在,则将抛出错误。所以你可以试试

 onRender : function() {
   try {
     view.getRegion("header")._ensureElement()
     // element exists
   } catch {
     //element does not exist
   }

还建议有一个
allowMissingEl
选项,您可以将该选项设置为在元素不存在时让
\u ensureElement()
返回false,但这可能会对项目的其余部分产生负面影响,并可能使调试更加困难。

查看源代码,看起来Morslima的答案是正确的-但是我们可以扩展木偶的区域类并自己实现测试行为。例如:

var BaseRegion = Marionette.Region.extend({

    // tests if the element exists for this region or not
    hasEl : function() {
        if ( _.isUndefined(this.getEl(this.el)[0]) ) {
            return false;
        }
        return true;
    }
});
然后在布局视图中

var Layout = Marionette.Layout.extend({

    regionClass: BaseRegion,

    regions : {
        'header' : '.header',
        'footer' : '.footer'
    },

    onRender : function() {
        if ( this.getRegion('header').hasEl() ) {
            // do something, e.g. show the region
        }
    }

});