服务器重新启动时模板重复列表项

时间:2016-02-25 03:59:23

标签: meteor meteor-blaze

此代码显示我的应用程序中MenuItems集合中的项目,但在开发服务器重新运行期间,该列表会将新列表添加到旧的"重复条目"。
我只需要一个列表,而不是重复。

为什么会发生这种情况以及如何解决?感谢

/////////////////////////////////////
//       client code
/////////////////////////////////////    
<template name="mainMenu">
  <div class="container">
    <div class="row">
      <section class="col-xs-12">
        <div class="list-group menuItems">
          {{#each menuItems}}
            <li data-template="{{menuItem}}" role="presentation">
              <a href="#" class="list-group-item menuItem">
                <img src="/abc.png">
                {{menuItem}} <span class="badge">&#x3e;</span>
              </a>
            </li>
          {{/each}}
        </div>
      </section>
    </div>
  </div>
</template>

Template.mainMenu.onCreated(function () {
  var template = this;
  template.handler = template.subscribe('menuItems');
});

Template.mainMenu.helpers({
  menuItems: function () {
    return MenuItems.find();
  }
});

Template.mainMenu.onDestroyed(function () {
  var template = this;
  if (template.handler && template.handler.stop) template.handler.stop();
});

/////////////////////////////////////
//       server code
/////////////////////////////////////    
var items =
  [
    {menuItem: "task1", group: "ab"},
    {menuItem: "task2", group: "ab"},
    {menuItem: "task3", group: "b"},
    {menuItem: "task4", group: "a"},
    {menuItem: "task5", group: "a"},
    {menuItem: "task6", group: "a"},
    {menuItem: "task7", group: "b"},
    {menuItem: "task8", group: "b"},
    {menuItem: "task9", group: "b"},
    {menuItem: "login", group: "ab"},
    {menuItem: "logout", group: "ab"}
  ]
_.each(items, function (doc) {
  MenuItems.insert(doc);
})

1 个答案:

答案 0 :(得分:1)

_.each(items, function (doc) {
  MenuItems.insert(doc);
})

这段代码会插入每个服务器启动的新数据集,因此每次运行时您的集合都会增长。如果您查看收藏集,可以轻松查看(meteor shellmeteor mongo可以提供帮助)。把它包裹在这个结构中

if (!MenuItems.find().count()) {
    _.each(items, function (doc) {
        MenuItems.insert(doc);
    })
}