在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
}
}
});
答案 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
}
}
});