0

我在下面显示了一段代码,它创建了一个 Mongo 集合,如下所示。但是,每当我尝试从 Meteor.isClient 范围内访问集合时,都会出现错误。请任何人都可以发现我的错误。

ImagesCollection  = new Mongo.Collection("Images");
Images  = new Mongo.Collection("Images");

if(Meteor.isClient){
  Template.body.helpers({ images :
        function() {
          console.log("Template Loade");
          return Images.find({},{sort: -1 });
        }
  }) ;

  Template.Images.events({
      'click .js-image' : function(event){
        $(event.target).css("Width", "50px");
      } ,
      'click .js-del-image' : function(event){
          var image_id  = this._id ;
          $("#"+image_id).hide({slow });
          Images.remove({"_id" : image_id});
      },

      'click .js-rate-image' : function(event){
          var  rating =  $(event.currentTarget).data("userrating");
          var image_id =  this.id ;

          Images.find({"_id": image_id});
      }


  });

}

我的 Startup.js 的内容也如下

if(Meteor.isServer){

    Meteor.startup(function(){

      for(var i  = 0 ; i<=23 ;  i++)
      {
          Images.insert({
             'img_src' :  'img_'+i+'.jpg' ,
             'img_alt'  :  'Image number' +  i
           });
            console.log(Images.find().count);
      }
    });
  }
4

3 回答 3

0

我不确定这是否是一个问题,但你为什么要初始化两次“图像”集合?

ImagesCollection = new Mongo.Collection("Images");

Images = new Mongo.Collection("Images");

并且 ImagesCollection 不会在您的代码中的任何地方使用。尝试删除此行之一。

于 2016-06-21T06:17:27.490 回答
0
consle.log("Template Loade");

由于您没有指定错误,因此上面的行将引发错误。

于 2016-06-20T17:09:35.563 回答
0

从您提供的代码中,我可以看到两个问题。

首先,在您的images模板助手中,Images.find()函数调用的第二个参数不正确。您缺少排序操作的文档字段规范。第二个参数需要采用 format {sort: {'document_field': -1}}。尽管您没有提供您看到的错误文本,但我怀疑该错误与 Mongo 无法处理查询有关,这就是原因。

其次,虽然这不那么严重并且不应该导致您无法访问Images客户端上的集合的问题,但在console.log()您的服务器代码中的语句中您Meteor.startup()正在访问count,就好像它是从Images.find()函数调用返回的游标上的属性一样。实际上,它是一个函数,应该像这样调用:Images.find().count().

另外,顺便说一句,我建议您为您定义的两个集合提供不同的名称。如果您尝试通过 Mongo shell 操作数据,给它们两个相同的名称可能会给您带来问题。

于 2016-06-21T05:13:32.593 回答