2016-02-04 66 views
-1

我嘗試實現向上或向下按鈕,用戶只能投1次和1次投下。如果你已經有upvoted的東西,應該可以通過另一個點擊upvote按鈕來刪除,但我不知道這是什麼缺失。我的代碼如下所示。我想我必須用虛假陳述來實現某些東西,但我嘗試了一些東西,但沒有成功。我會感謝您的幫助!Up和Downvote按鈕

Template.postArgument.events({ 
'click':function() { 
    Session.set('selected_argument', this._id); 
    }, 
'click .yes':function() { 
      if(Meteor.user()) { 
      var postId = Arguments.findOne({_id:this._id}) 
      console.log(postId); 
      if($.inArray(Meteor.userId(), postId.votedUp) !==-1) { 
       return "Voted"; 
      } else { 
     var argumentId = Session.get('selected_argument'); 
     Arguments.update(argumentId, {$inc: {'score': 1 }}); 
     Arguments.update(argumentId, {$addToSet: {votedUp: Meteor.userId()}}); 
      } 
      } 
    }}); 
+0

這不是句法上有效的......你不用關閉大括號關閉'click'事件的函數。要麼在粘貼過程中省略了一些內容,要麼在解決這個問題之前解決一些語法問題。 –

+0

它只是在複製和粘貼過程中失敗;) – decisionMaker

+0

所以,換句話說,你需要兩個看起來像投票按鈕的複選框。 –

回答

2

您的一般方法是正確的,但是您根本不需要Session變量甚至是第一個點擊處理程序。而且你不需要從函數中返回任何東西。

Template.postArgument.events({ 
    'click .yes': function(){ 
    if (Meteor.user()) { 
     var post = Arguments.findOne({_id:this._id}); 
     if ($.inArray(Meteor.userId(), post.votedUp) === -1) { 
     Arguments.update(this._id, { 
      $inc: { score: 1 }, 
      $addToSet: { votedUp: Meteor.userId() } 
     }); 
     } else { 
     Arguments.update(this._id, { 
      $inc: { score: -1 }, 
      $pull: { votedUp: Meteor.userId() } 
     }); 
     } 
    } 
    } 
}); 
+0

但是,如果我在.yes按鈕上再次單擊,我怎樣才能刪除我最近的+1分數? – decisionMaker

+0

查看更新的代碼 –

2

你可以開始通過檢查在upvotes和downvotes和遞增/遞減用戶是否存在相應然後將用戶添加到組簡單。

Meteor.methods({ 
    'downvote post': function (postId) { 
    check(postId, String); 
    let post = Posts.findOne(postId); 

    Posts.update(postId, post.downvoters.indexOf(this.userId !== -1) ? { 
     $inc: { downvotes: -1 },    // remove this user's downvote. 
     $pull: { downvoters: this.userId }  // remove this user from downvoters 
    } : { 
     $inc: { downvotes: 1 },    // add this user's downvote 
     $addToSet: { downvoters: this.userId } // add this user to downvoters. 
    }); 
    } 
});