【问题标题】:Exception while simulating the effect of invoking 'insertPlayerData' ReferenceError: currentUserId is not defined模拟调用“insertPlayerData”ReferenceError 的效果时出现异常:未定义 currentUserId
【发布时间】:2015-11-13 03:12:58
【问题描述】:

PlayerList = new Mongo.Collection('players');
UerAccounts = new Mongo.Collection('user');
if(Meteor.isClient){
Template.leaderboard.helpers({
     'player':function(){
         var currentUserId = Meteor.userId();
	 return PlayerList.find({createdBy: currentUserId},{sort: {score: -1,name: 1}})
      },
     'selectedClass':function(){
	 var playerId = this._id;
	 var selectedPlayer = Session.get('selectedPlayer');
	 if(playerId == selectedPlayer){
	 return "selected"
        }
      },
      'showSelectedPlayer':function(){
         var selectedPlayer  = Session.get('selectedPlayer');
         return PlayerList.findOne(selectedPlayer)
      }        
});
Template.leaderboard.events({
     'click .player': function(){
	 var playerId = this._id;
         Session.set('selectedPlayer', playerId);
      },
      'click .increment':function(){
         var selectedPlayer = Session.get('selectedPlayer');
         PlayerList.update(selectedPlayer,{$inc:{score: 5}});
      },
      'click .decrement':function(){
         var selectedPlayer = Session.get('selectedPlayer');
         PlayerList.update(selectedPlayer,{$inc:{score: -5}});
      },
      'click .remove':function(){
         var selectedPlayer = Session.get('selectedPlayer');
         PlayerList.remove(selectedPlayer);
      }  
});
Template.addPlayerForm.events({
      'submit form':function(event){
         event.preventDefault();
         var playerNameVar = event.target.playerName.value;
         Meteor.call('insertPlayerData');
      } 
});
      Meteor.subscribe('thePlayers');
      Meteor.methods({
	'insertPlayerData': function(){
	   var currentUerId = Meteor.userId();
	   PlayerList({
		name:"David",
		score:0,
		createdBy:currentUserId
		});
	}
});
}
if(Meteor.isServer){
     Meteor.publish('thePlayers',function(){
       var currentUserId = this.userId;
       return PlayerList.find({createdBy: currentUserId})
});
}
<head>
    <title>Leaderboard</title>
</head>
<body>
    <h1>Leaderboard</h1>
    {{> leaderboard}}
    {{> loginButtons}}
</body>
<template name="leaderboard">
   
     <ul>
         {{#each player}}
         <li class="player {{selectedClass}}">{{name}}: {{score}}</li>
         {{/each}}
     </ul>
     <input type="button" class = "increment" value ="give five points">
     <input type="button" class = "decrement" value ="take five points">
     <input type="button" class = "remove" value="remove player">
   {{#if showSelectedPlayer}}
     <li>slected Player: {{showSelectedPlayer.name}}</li>
   {{/if}}
   {{> addPlayerForm}}
     
</template>
<template name="addPlayerForm">
   {{#if currentUser}}
      <form>
         <input type="text" name="playerName">
         <input type="submit" value="Add Player">
      </form>
   {{/if}}
</template>
     

我是新来的流星现在学习方法和安全问题。 当我执行我的代码时,它显示“模拟调用'insertPlayerData'参考错误的效果时出现异常:未定义currentUserId”错误。

【问题讨论】:

  • 请出示相关代码。

标签: javascript mongodb meteor


【解决方案1】:

这个 Meteor 方法应该在服务器上,而不是在客户端上。您还缺少Meteor.call('insertPlayerData') 语句的回调。我清理了其他一些东西(Meteor.subscribe 不应该像那样漂浮在空旷的空间中)。

下面的新代码(未经测试):

PlayerList = new Mongo.Collection('players');
UserAccounts = new Mongo.Collection('user');

if (Meteor.isClient) {
  Template.leaderboard.onCreated(function () {
    this.subscribe('thePlayers');
  });

  Template.leaderboard.helpers({
    'player': function () {
      var currentUserId = Meteor.userId();
      return PlayerList.find({createdBy: currentUserId}, {
        sort: {
          score: -1,
          name: 1
        }
      })
    },
    'selectedClass': function () {
      var playerId = this._id;
      var selectedPlayer = Session.get('selectedPlayer');
      if (playerId == selectedPlayer) {
        return "selected"
      }
    },
    'showSelectedPlayer': function () {
      var selectedPlayer = Session.get('selectedPlayer');
      return PlayerList.findOne(selectedPlayer)
    }
  });

  Template.leaderboard.events({
    'click .player': function () {
      var playerId = this._id;
      Session.set('selectedPlayer', playerId);
    },
    'click .increment': function () {
      var selectedPlayer = Session.get('selectedPlayer');
      PlayerList.update(selectedPlayer, {$inc: {score: 5}});
    },
    'click .decrement': function () {
      var selectedPlayer = Session.get('selectedPlayer');
      PlayerList.update(selectedPlayer, {$inc: {score: -5}});
    },
    'click .remove': function () {
      var selectedPlayer = Session.get('selectedPlayer');
      PlayerList.remove(selectedPlayer);
    }
  });

  Template.addPlayerForm.events({
    'submit form': function (event) {
      event.preventDefault();
      var playerNameVar = event.target.playerName.value;
      Meteor.call('insertPlayerData', function (error, result) {
        // handle error/success
      });
    }
  });
}

if (Meteor.isServer) {
  Meteor.publish('thePlayers', function () {
    var currentUserId = this.userId;
    return PlayerList.find({createdBy: currentUserId})
  });

  Meteor.methods({
    'insertPlayerData': function () {
      var currentUserId = Meteor.userId();
      PlayerList.insert({
        name: "David",
        score: 0,
        createdBy: currentUserId
      });
      // need error handling
      return {success: true};
    }
  });
}

【讨论】:

    猜你喜欢
    • 2016-09-23
    • 2015-06-17
    • 2017-09-27
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多