2016-01-20 45 views
0

这应该是一个相对简单的解决方案,但是自从我做了任何编程并且我有点生疏以来已经很长时间了。基本上,我想用计数器创建一个简单的页面,当点击一个按钮时,计数器的值增加1。这是默认的Meteor应用程序的设置方式,但不包括用于保存数据的数据库模型。基本上,我希望数字在即使离开页面时也能保持不变。我如何去做这件事?如何在流星中创建点击计数器(带数据库)?

到目前为止,我已经创建了这样一个模式:

counter = new Mongo.Collection('counter'); 

counter.attachSchema(
    new SimpleSchema({ 
    clicks: { 
     type: Number 
    }, 
    createdAt: { 
     type: Date, 
     denyUpdate: true 
    } 
    }) 
); 

并用以下JS按钮连接:通过一个

Template.home.events({ 
    "click .increment": function (event) { 
    counter.update({ 
     clicks: "++", 
    }); 
    } 
}); 
+0

有相当多的方式......现在的问题基本上是如何当客户端已经离开应用程序保存数据。它非常广泛。我认为您需要添加更多信息,例如:您是否使用帐户?你想将这些数据存储在服务器上还是客户端上?另外,这不是你如何在Mongo中增加一个计数器。 –

回答

1

正确的更新方法,增加外地clicks会例如:Counter.update({_id: counterDoc._id}, {$inc: {clicks: 1}});

这里有一个演示:

if (Meteor.isClient) { 
    Template.home.events({ 
     "click .increment": function() { 
      var counterDoc = Counter.findOne(); 
      if (counterDoc) Counter.update({_id: counterDoc._id}, {$inc: {clicks: 1}}); 
      else Counter.insert({clicks: 1}); 
     } 
    }); 

    Template.home.helpers({ 
     clicks: function() { 
      var counterDoc = Counter.findOne(); 
      return counterDoc ? counterDoc.clicks : "0"; 
     } 
    }); 
} 

<template name="home"> 
    {{clicks}} 
    <br/> 
    <button type="button" class="increment">Increment</button> 
</template> 

Counter = new Mongo.Collection('counter'); 

Counter.attachSchema(
    new SimpleSchema({ 
     clicks: { 
      type: Number 
     }, 
     createdAt: { 
      type: Date, 
      denyUpdate: true, 
      autoValue: function() { 
       if (this.isInsert) return new Date; 
       else if (this.isUpsert) return {$setOnInsert: new Date}; 
       else this.unset(); 
      } 
     } 
    }) 
); 
+0

非常感谢!不幸的是,柜台本身并未显示(但),但我认为这与我没有正确宣传或订阅的事实有关。 – zenben1126

+1

@ zenben1126不客气!是的,情况可能如此。你能打开浏览器的控制台并运行'Counter.find()。fetch();'来查看你是否可以在客户端访问计数器的文档? –

+1

Matthias我想通了:)我在IronRouter的订阅是关闭的。丹科 – zenben1126