2013-05-01 43 views
1

我有一个应用程序需要显示指标。应用程序需要为每个指标显示一个单独的垂直部分。当我开始时,只有5个指标,所以我天真地创建了一个包含5个区域的模板,每个指标需要显示一个。现在,需要添加新的度量标准,并且我希望避免在模板中添加“硬编码”区域div。我想重构这个,并根据一些配置数据在启动时动态创建所需的区域。需要澄清在Marionette中动态添加区域

所以我一直在寻找最新的木偶释放和问题“Dynamically add regions to Marionette layout”,德里克·贝利提到,木偶V1.0通过addRegion()支持布局活力的地区,如:

var layout = new MyLayout(); 
layout.render() 
layout.addRegion("someRegion", "#some-element"); 
layout.someRegion.show(new MyView()); 

我在我的代码中尝试过(使用Marionette 1.0.2),但我没有得到它的工作。我的模板中没有id =“some-element”的div,我怀疑这可能是原因。我希望Marionette能够自己创造这个div。

也许我对动态添加区域的预期是错误的。所以我的第一个问题是:在动态添加区域到布局时,是否必须在布局中存在addRegion()函数中传递的元素ID?

如果是这样,那么我回到了在模板中“烧”这些区域以便自己附着的问题。我的后续问题是:以数据驱动的方式做这件事的最佳方式是什么?是否编写我自己的render()函数,以便正确的div集创建?或者也许为我的Layout提供一个模型对象,该对象将包含模板可以迭代以创建必要的div的数据?如果我们事先不知道实际需要多少区域,我们如何将区域动态添加到布局对象?

回答

0

我相信你需要使用jQuery(或类似的)来创建页面上的元素。一个地区期望元素存在。

否则,我相信你的答案是here

1

指定了Aa @aaronfay,我们需要使用jQuery创建页面上的元素。下面是一些示例代码:

var layout = new MyLayout(); 
layout.render() 
var regionName = "dynamicRegion"; 
layout.$el.append('<div id="'+regionName+'"></div>'); 
layout.addRegion("someRegion", "#"+regionName); 
layout.someRegion.show(new MyView());