如何在Ember中构建递归视图?

时间:2012-09-26 06:06:57

标签: model-view-controller ember.js

在我的应用程序中,我有一个名为 block 的项目,它可以包含并包含在其他项目中。为了简单起见,我们可以说这些块可以无限嵌套。

我想知道是否可以创建与嵌套块相对应的递归视图。每个视图都会呈现为包含其子级并位于其父级DIV内的DIV吗?

虽然视图在它们可以包含的内容方面类似,但它们从服务器获得的实际内容可能不同。以下是一个示例数据:

App.blocks.set('content',[
    Em.Object.create({title:"One", id:"1", is_inside:"0"}),
    Em.Object.create({title:"Two", id:"2", is_inside:"1"}),
    Em.Object.create({title:"Three", id:"3", is_inside:"0"}),
    Em.Object.create({title:"Four", id:"4", is_inside:"3"}),
    Em.Object.create({title:"Five", id:"5", is_inside:"4"})
])

在此示例中,块1将呈现为root(假设0是root,这意味着不在任何其他块内)。第二个块将在第一个块内呈现,依此类推。

我注意到前一段时间已经问过similar question,但我对那里的答案不满意。我觉得必须有一种优雅的方式来实现这一目标。

你能指点我在Ember中如何做到这一点的例子吗?如果没有,任何可以帮助我取得进步并改进我的问题的建议也将非常感激。

编辑:这是a jsFiddle,我用一些初始数据作为起点。希望在您的帮助下,我可以根据 is_inside 关系嵌套DIVs。我已经更新了帖子以使用这个更简单的例子。

1 个答案:

答案 0 :(得分:0)

将此作为提示,我认为layout的{​​{1}}属性正在抢救......它的工作方式是这样的

Ember.View

将导致以下html

App.myView =  Ember.View.extend({
  layoutName: "parent",
  templateName: "child"
})

<script type="text/handlebars" data-template-name="parent">
  Who's your Daddy ??<br> {{yield}} <br> ######
</script>


<script type="text/handlebars" data-template-name="child">
  I'm your son !
</script>

首先对数据建模,然后在js中使用<div id="ember1" class="ember-view"> Who's your Daddy? <div id="ember-2" class="ember-view"> I'm your son ! </div> ###### </div> for循环来创建视图,我不认为使用Handlebar助手进行递归是一个好主意。

编辑部分 可能有比这更好的方法...但是检查一下,在这里你不是将嵌套限制在一个层次,对吗?

while