服务器重新启动时模板重复列表项
template duplicate list items when server re starts
此代码在我的应用程序中显示 MenuItems 集合中的项目,但在开发过程中当服务器重新运行时,该列表会在旧列表中添加一个新列表 "duplicate entries"。
我只需要一个列表,不需要重复。
为什么会发生这种情况以及如何解决?谢谢
/////////////////////////////////////
// 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">></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);
})
_.each(items, function (doc) {
MenuItems.insert(doc);
})
这段代码会在每个服务器启动时插入新的数据束,因此您的 collection 会随着每个 运行 的增长而增长。如果您查看 collection(meteor shell
或 meteor mongo
可以提供帮助),您可以轻松地检查它。把它包裹在这个结构中
if (!MenuItems.find().count()) {
_.each(items, function (doc) {
MenuItems.insert(doc);
})
}
此代码在我的应用程序中显示 MenuItems 集合中的项目,但在开发过程中当服务器重新运行时,该列表会在旧列表中添加一个新列表 "duplicate entries"。
我只需要一个列表,不需要重复。
为什么会发生这种情况以及如何解决?谢谢
/////////////////////////////////////
// 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">></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);
})
_.each(items, function (doc) {
MenuItems.insert(doc);
})
这段代码会在每个服务器启动时插入新的数据束,因此您的 collection 会随着每个 运行 的增长而增长。如果您查看 collection(meteor shell
或 meteor mongo
可以提供帮助),您可以轻松地检查它。把它包裹在这个结构中
if (!MenuItems.find().count()) {
_.each(items, function (doc) {
MenuItems.insert(doc);
})
}