【问题标题】:Cloud9 & Meteor.js undefined global varCloud9 & Meteor.js 未定义的全局变量
【发布时间】:2015-05-30 12:46:49
【问题描述】:

我正在尝试在 Cloud9 上创建排行榜。但我得到错误: PlayersList not defined... 在编辑器中。该应用程序正在运行,但它在编辑器中的代码下划线所有“未定义 PlayersList”

代码:

PlayersList = new Mongo.Collection('players');

if(Meteor.isClient){

   Template.leaderboard.helpers({

      'player': function(){
        return PlayersList.find({}, {sort: {score: -1, name: 1}});
    },

    'selectedClass': function(){
      var playerId = this._id;
      var selectedPlayer = Session.get('selectedPlayer');
      if(selectedPlayer === playerId){
      return 'selected';
      }
    },

    'showSelectedPlayer': function(){
      var selectedPlayer = Session.get('selectedPlayer');
      return PlayersList.findOne(selectedPlayer);
    }

   });

【问题讨论】:

  • 当这样写时: var PlayersList = new Mongo.Collection('players'); ....一切都好...
  • 只是编辑的问题,还是meteor也有抱怨?
  • 当我使用: var PlayersList = new Mongo.Collection('players');该应用程序将无法运行...但是编辑器中的错误消失了...使用时:PlayersList = new Mongo.Collection('players');应用程序工作正常,但编辑器错误强调 var (PlayersList)

标签: mongodb meteor undefined cloud9-ide


【解决方案1】:

Cloud9 的编辑器使用ESLint,使用foo = 22 使它认为某处缺少像var foo; 这样的语句。您可以选择忽略此问题,也可以按如下方式进行修复:

/*eslint-env meteor */ 添加到顶部,这样它就不会发出有关 Meteor 全局变量的警告,也许您还需要添加 /* globals Player */ 以防错误仍然存​​在。 (我还没有测试过,请告诉我它是怎么回事,以便我改进答案)

【讨论】:

    【解决方案2】:

    我通过一些解决方法解决了这个问题。我添加了coffeescript,然后当您使用coffeescript 定义集合时,我应该在全局上使用@ 符号。这正在为我解决问题。它工作正常。当我在新的浏览器窗口中打开该应用程序时,可以在控制台中看到帖子。

    例子:

    @Posts = new Mongo.Collection('posts')
    

    【讨论】:

    • 是的,那是一个肮脏的把戏。你看,Meteor 有自己的命名空间(文件和包范围;见:docs.meteor.com/#/full/namespacing);但是这不适用于 CoffeeScript,因为它不使用 var 声明变量。
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2014-02-02
    • 2016-05-13
    相关资源
    最近更新 更多