我正在构建一个测试应用程序,这是我学习编程时的第一个应用程序,所以如果我的术语关闭,请原谅我。为什么Meteor在刷新后复制数据库对象?
我跑流星版本0.6.6.3在Chromium浏览器版本30.0.1599.114
我有添加到集合假冒产品,如下面的代码所示。但是,由于某种原因,当我刷新浏览器或重新启动服务器后,每个产品都会在浏览器中重复显示,以便显示两个锤子,两个扳手等。我能够解决此问题的唯一方法是通过手动从数据库中删除产品。
我没有看到我的代码有任何问题,所以这与Meteor有什么关系?
任何帮助将不胜感激。
JS代码:
var Products = new Meteor.Collection("Products");
if (Meteor.isClient) {
window.Products = Products;
Products.insert({Name : "Hammer", Price : 4.50, InStock : true});
Products.insert({Name : "Wrench", Price : 2.70, InStock : true});
Products.insert({Name : "Screw Driver", Price : 3.00, InStock : false});
Products.insert({Name : "Drill", Price : 5.25, InStock : true});
Template.Products.ProductArr = function(){
return Products.find({}, {sort: {Name: 1}});
};
Template.Products.events = {
"click .Product" : function(){
if(this.InStock)
confirm("Would you like to buy a " + this.Name + " for " + this.Price + "$");
else
alert("That item is not in stock");
}
};
}
if (Meteor.isServer) {
Meteor.startup(function() {
// code to run on server at startup
});
}
HTML低于,只是一个简单的模板。
<head>
<title>Products</title>
</head>
<body>
{{> Products}}
</body>
<template name="Products">
{{#each ProductArr}}
<div class="Product">
<h2>{{Name}}</h2>
<p>Price: ${{Price}}</p>
{{#if this.InStock}}
<p>This Item is in stock</p>
{{else}}
<p>This Item is currently sold out</p>
{{/if}}
</div>
{{/each}}
</template>
如果该代码在客户端上执行,它必须在客户端收到所有数据后执行,否则,客户端会认为Products集合是空的,尽管集合中存在客户端不是意识到呢。 –
这对我有效,谢谢。 upsert看起来很有趣,所以我可能会在未来尝试。 – sapmub