Javascript 测试木偶布局视图中是否缺少区域元素
在木偶中是否有一种优雅的方法来测试视图渲染后DOM中是否存在区域(el)元素?最好不用重写区域选择器和使用jQuery搜索DOM 例如-此布局视图: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'
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
}
}
});