在牵线木偶布局视图中测试缺失区域元素

时间:2015-02-18 14:43:15

标签: javascript backbone.js marionette

在Marionette中是否有一种优雅的方式来测试在呈现视图后DOM中是否存在某个区域(e)?最好不要重写区域选择器并使用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
  }
 }

});

2 个答案:

答案 0 :(得分:2)

优雅?不。但是当元素存在时,Marionette的view.getRegion()._ensureElement()返回true,如果元素不存在则会抛出错误。所以你可以试试......

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

annotated marionette source还表明,当元素不存在时,您可以设置allowMissingEl选项让_ensureElement()返回false,但这可能会对其他元素产生负面影响您的项目,可能会使调试更加困难。

答案 1 :(得分:0)

从源头看,看起来Morslamina的回答是正确的 - 但是我们可以扩展Marionette的地区类并自己实施测试行为。例如:

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
        }
    }

});