Templates 如何使用meteor模板创建类似目录的结构?
考虑一下我的预期输出模型: Mongo DB中的数据结构如下所示-我没有将子类别嵌套在文档中,因为我仍然希望能够以原子方式更新子文档-我还希望允许下面的层数量动态变化。据我所见,Mongo目前不允许轻松、动态地访问嵌套文档Templates 如何使用meteor模板创建类似目录的结构?,templates,recursion,directory,meteor,Templates,Recursion,Directory,Meteor,考虑一下我的预期输出模型: Mongo DB中的数据结构如下所示-我没有将子类别嵌套在文档中,因为我仍然希望能够以原子方式更新子文档-我还希望允许下面的层数量动态变化。据我所见,Mongo目前不允许轻松、动态地访问嵌套文档 topmost_category = { _id : "foo", category_name : "Example", parent_category: null, subcatories: [ "sub_foo1", "sub_foo2", ... ]
topmost_category = {
_id : "foo",
category_name : "Example",
parent_category: null,
subcatories: [ "sub_foo1", "sub_foo2", ... ]
}
child_category = {
_id = "sub_foo1",
category_name : "Example 2",
parent_category: "foo",
subcategories: []
}
底层HTML只是由嵌套分支组成。当前选定的类别将获得一个“活动”类,前面的图标命名为“图标文件夹关闭”和“图标文件夹打开”(
)
现在,我可以用这个答案来创建一个完整的树状结构。然而,所有分支机构都将“开放”。如何使当前选择的分支像我的实体模型中所示那样可见(并且仍然是被动启动的)?最简单的方法是为分支添加一个布尔标志,指示它们是否属于当前路径,因此应该打开
<template name="branch">
{{#if open}}
<div class="openBranch">
...
{{#each children}}
...
{{/each
</div>
{{else}}
<div class="closedBranch">
...
</div>
{{/if}}
</template>
- 当用户更改选择时,清除阵列并使用从选定分支到顶部的路径填充它
您可以在这里看到与Hubert描述的方法非常相似的实现: 这是wiki(工作)类别浏览器功能的代码(您可以在那里看到演示)
Hubert回答的主要区别在于,它使用一个带有会话变量的发布/订阅来实时获取打开的子项的数据。看起来是个好主意。我会在今天晚些时候尝试一下,然后再回复你。我确实使用了你想法的一个变体,详细说明如下,这正是我想要的。由于我在这段时间内提出了休伯特解的一个变体,我将看看你的建议有什么不同。但你的解决方案正是我想要的。树形结构,具有可见的兄弟/子级到活动路径和被动启动!
Template.branch.open = function() {
return _.indexOf(openedBranches, this._id) !== -1;
}