3

考虑一下我预期输出的这个模型:

预期结构

Mongo DB 中这背后的数据结构如下所示——我没有在文档中嵌套子类别,因为我仍然希望能够以原子方式更新子文档——并且我还希望允许下面的动态层数。据我所知,Mongo 目前不允许对嵌套文档进行简单、动态的访问。

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 仅由嵌套的 - 分支组成。当前选择的类别有一个“活动”类,前面的图标被命名为“icon-folder-close”和“icon-folder-open”(<i class="icon-folder-close"></i>)。

现在,我可以使用这个答案来创建一个完整的树状结构。但是,所有分支机构都将“开放”。我如何做到这一点,以便只有当前选择的分支是可见的,就像我的模型中显示的那样(并且仍然让它响应启动)?

4

2 回答 2

2

您可以在此处看到与 Hubert 所描述的方法非常相似的方法的实现:

http://www.meteorpedia.com/read/Trees

它是 wiki 的(工作)类别浏览器功能的代码(你可以在那里看到一个演示)。

与休伯特的回答的主要区别在于它使用带有会话变量的发布/订阅来实时获取打开的孩子的数据。

于 2013-07-12T18:37:57.527 回答
1

最简单的方法是为分支添加一个布尔标志,表示它们是否属于当前路径,因此应该打开。

 

<template name="branch">

    {{#if open}}
        <div class="openBranch">
            ...
            {{#each children}}
                ...
            {{/each
        </div>
    {{else}}
        <div class="closedBranch">
            ...
        </div>
    {{/if}}

</template>

 

现在,这个标志的设置和管理取决于你的应用程序的逻辑。您将当前选择的分支存储在哪里?

 

我假设该状态仅限于单个客户。在这种情况下,一种解决方案是:

  • 维护一组打开的分支 id,范围为单个文件,
  • open标志实现为助手:

 

Template.branch.open = function() {
    return _.indexOf(openedBranches, this._id) !== -1;
}

 

  • 当用户更改选择时,清除数组并使用从所选分支到顶部的路径填充它。

 

于 2013-07-10T10:26:35.577 回答