2016-06-29 4 views
0

Ich möchte einen Like-Button hinzufügen.Wenn ein Nutzer auf einen Button eines bestimmten Posts klickt, sollte die Anzahl der Likes dieses bestimmten Posts um 1. erhöht werden. Wenn er jedoch erneut auf den Like-Button desselben Posts klickt, wird die Anzahl der Likes angezeigt sollte um 1 sinken.Wie kann sichergestellt werden, dass ein Benutzer für jeden Beitrag nur einmal auf "Gefällt mir" klicken kann?

In meinem Code kann der Benutzer mehr als 1 wie zu jedem Beitrag geben.Wie soll ich das ändern?

Javascript-Code ist:

Template.postItem.events({  
'click button':function(event){ 
      event.preventDefault(); 
      var documentId = this._id; 

      this.likes=this.likes+1; 
      console.log(this); 
      Posts.update({ _id: documentId },{$set:{likes:this.likes}}); 
      } 


      }); 

HTML-Code:

<template name="postItem"> 
    <li> 
    {{_id}} 
    <h4>{{name}}</h4> 
    <i>Posted by {{postedBy}} on {{createdAt}}</i> 
    <br> 
    {{likes}}<button class="btn btn-default glyphicon glyphicon-hand-up" >Like</button> 

Hier {{Taste}} ist ein Helfer der PostItem, die auf jeden Post den Wert der Anzahl gleicher zurückgibt.

+0

Sie müssen für jeden Benutzer einen Flag zum Speichern für jeden Post sagen zu können, wenn der Benutzer bereits abgestimmt hat. – Thilo

+0

@Thilo Wie kann ich das tun? –

+2

Vielleicht 'Likes.insert ({_id: documentId +" _ "+ userId})'. Dann können Sie prüfen, ob ein solches Dokument existiert oder nicht. – Thilo

Antwort

0

Sie können im Posts-Dokument eine Variable "Likes" als Array mit den IDs der Benutzer haben, die den Post mögen.

Post = { 
    likes: [String] 
} 

Und Sie können überprüfen, ob der bestimmte Benutzer den Beitrag bereits mag.

var Post = Posts.find({_id: documentId, likes: Meteor.userId()}); 

Dokumentation für Mongo: https://docs.mongodb.com/manual/tutorial/query-documents/#match-an-array-element

+0

Das erfordert eine Aktualisierung des Dokuments, wenn es gemocht wird, und es skaliert nicht gut für eine große Anzahl von Benutzern. – Thilo

+0

@Thilo Ich denke, wenn Sie nicht 50M likes/min haben, könnte ich den Job machen. Sie müssen ihre IDs irgendwo speichern, um zu überprüfen, ob der Benutzer den Post schon mag. –

Verwandte Themen