2016-01-20 42 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