Dynamic 向木偶布局动态添加区域
我有一个布局,但不能预先定义它的所有区域,因为它们是未知的 因此,稍后将创建一个ItemView,我想在布局中使用视图的ID作为区域名称创建一个新区域,这样我就可以说:Dynamic 向木偶布局动态添加区域,dynamic,backbone.js,marionette,regions,Dynamic,Backbone.js,Marionette,Regions,我有一个布局,但不能预先定义它的所有区域,因为它们是未知的 因此,稍后将创建一个ItemView,我想在布局中使用视图的ID作为区域名称创建一个新区域,这样我就可以说: layout.dynamicRegionName.show(newItemView); 但这里存在循环依赖 我还没有呈现视图,因此无法在布局对.addRegion()的调用中引用其DOM元素 我无法渲染它,正是因为我希望它通过调用其.show()通过动态添加的区域连接到DOM树 @DerickBailey在github中的木偶
layout.dynamicRegionName.show(newItemView);
但这里存在循环依赖
Layout.show(new MenuView())代码>
但从技术上讲,这接近于我们需要的,即能够:
layout.addRegion(VAR_WITH_NEW_REGION_NAME, aViewInstance);
并让它将一个新区域直接添加到视图实例中的布局渲染中
我是否错过了实现这一目标的其他明显途径?这是已知的缺失功能吗?有没有理由不拥有它
我知道之前的一个问题:“
但是没有看到任何明确的答案。木偶1.0版(目前是最新版本)支持布局中的动态区域
var MyLayout = Marionette.Layout.extend({
template: "#some-template"
});
var layout = new MyLayout();
layout.render();
layout.addRegion("someRegion", "#some-element");
layout.someRegion.show(new MyView());
在我的一个项目中,我遇到了类似的问题。我需要动态创建一个表单,也就是说,表单将包含不同的字段视图,而这些字段视图在运行时之前无法确定。我需要的领域是木偶视图,因为他们有相当复杂的行为
我在CoffeeScript
中的木偶1.4中所采用的方法:
class Module.AdditionalOptionsLayout extends Marionette.Layout
tagName: 'form'
initialize: (options = {}) ->
@_fieldViews = options.fieldViews || []
onRender: ->
@_showFields @_fieldViews
_showFields: (fieldViews) ->
fieldViews.forEach (fieldView) => @_addRegion().show fieldView
_addRegion: ->
regionClass = _.uniqueId('field-region__')
@$el.append $("<div class=\"#{regionClass}\"></div>")
@addRegion regionClass, '.' + regionClass
class Module.additionaloptions布局扩展了木偶.Layout
标记名:“窗体”
初始化:(选项={})->
@_FieldView=options.FieldView | |【】
onRender:->
@_showFields@_fieldview
_展示区:(现场视图)->
fieldView.forEach(fieldView)=>@_addRegion().显示fieldView
_addRegion:->
regionClass=\.uniqueId('field-region\\')
@$el.append$(“”)
@addRegion regionClass,'.'+regionClass
请让我知道,如果它需要进一步的解释,或者我可以澄清这在JS。我也知道这是一个迟来的答案,但是,希望有人能发现它仍然有用。另外,请注意-该答案仅与木偶1.x相关有用的答案。我的问题如下。元素(#某个元素)是否需要在模板中?换句话说,模板是否包含该元素,或者addRegion方法是否为我附加该元素?请参见我的问题。是的,模板必须包含el。所以addRegion有点奇怪:-/不太奇怪。区域是仅围绕给定元素的容器。同样,当你删除一个区域时,它不会删除DOM元素,只会删除区域对象。@backdesk我理解它是这样工作的,但仅仅因为它是作者想要的功能,并不意味着从最终用户的角度看它并不奇怪。为了“添加区域”,我仍然需要一个包装el,这确实让人感到奇怪。在谷歌搜索“动态木偶区域”之后,我提出了这个问题,希望我能够有一个空的根元素,可以连接不同的区域。这就是人们听到“动态”时通常的想法。对我来说,这听起来很静态。