动态添加区域到Marionette布局

Tha*_* K. 9 dynamic regions backbone.js marionette

我有一个布局,但不能提前定义它的所有区域,因为它们是未知的.

所以稍后会创建一个ItemView,我想在布局中使用视图的ID作为区域名称创建一个新区域,这样我就可以说:

layout.dynamicRegionName.show(newItemView);
Run Code Online (Sandbox Code Playgroud)

但这里有循环依赖.

  1. 我还没有呈现视图,所以我无法引用它的DOM元素,以便在布局调用.addRegion()时使用

  2. 我无法渲染它,正是因为我希望它通过调用它的.show()通过动态添加的区域附加到DOM树.

@DerickBailey在github中的Marionette.Layout文档中,我相信示例中有一个错误: layout.show(new MenuView());

但从技术上讲,这接近我们在这里所需要的,即能够做到:

layout.addRegion(VAR_WITH_NEW_REGION_NAME, aViewInstance);
Run Code Online (Sandbox Code Playgroud)

并将其添加到布局渲染中的新Region直接在视图实例中.

我错过了其他一些明显的方法来实现这一目标吗?这是一个已知的缺失功能吗?有没有理由不拥有它?

我知道之前的问题:" 动态添加/删除区域到布局 ",但没有看到任何明确/明确的答案.

Der*_*ley 19

Marionette v1.0(v1.0.2是最新的,现在)支持Layouts中的动态区域.


var MyLayout = Marionette.Layout.extend({
  template: "#some-template"
});

var layout = new MyLayout();
layout.render();

layout.addRegion("someRegion", "#some-element");

layout.someRegion.show(new MyView());
Run Code Online (Sandbox Code Playgroud)

  • @backdesk我理解它的意思是以这种方式工作,但仅仅因为它是作者的预期功能并不意味着从最终用户的角度来看它并不奇怪.我仍然需要一个包装器才能"添加区域",这确实让我觉得很奇怪.我在google搜索"动态牵线木偶区域"之后得到了这个问题,希望我能够拥有一个可以连接各个区域的空根元素.这就是人们在听到"动态"时通常会想到的.对我来说这听起来很不稳定. (4认同)
  • 有用的答案.我的问题如下.元素(#some-element)是否需要在模板中?换句话说,模板是否包含该元素,或者addRegion方法是否为我添加了该元素?请参阅我的问题http://stackoverflow.com/questions/20570284/creating-a-layout-that-accepts-a-variable-number-of-views-and-hence-regions (2认同)