无法在 CollectionFS 中为 MeteorJS 应用操作 Images.find()

Couldn't manipulate Images.find() in CollectionFS for MeteorJS app

我的应用有点像 TelescopeJS,但更简单。我试图回应已添加到 post 添加表单中的特定图像,该表单需要输入 post 的名称、图片、类别和描述。它有 2 个集合,一个用于文章,另一个用于图像(不是 mongo 集合,它是一个 FS 集合。)文章集合存储名称、描述和类别名称,另一个存储图像。 **我的问题是:** 在 FS 集合文档中,循环

{{#each images}}
    <img src="{{this.url}}" alt="" class="thumbnail" />
{{/each}}

其中图片:returns Images.find({}) 我的文章代码是:

{{#each articles}}
    <li style="margin-right: 1%;">{{>article}}</li>  
{{/each}}

其中文章:returns Articles.find({})

我的文章模板有图像循环,这会导致集合中的所有图像显示在一个 post 中。我只想为特定 post 显示特定图像。

这些是事件:

'change .img': function(event, template) {
    FS.Utility.eachFile(event, function(file) {
      Images.insert(file, function (err, fileObj) {
        //Inserted new doc with ID fileObj._id, and kicked off the data upload using HTTP
      });
    });
  },
    'click .save':function(evt,tmpl){
        var description = tmpl.find('.description').value;
        var name = tmpl.find('.name').value;
        var date=new Date();
        var cat = tmpl.find('.selectCat').value;

        Articles.insert({
            description:description,
            name:name,
            time:date.toLocaleDateString()+' at '+date.toLocaleTimeString(),
            author:Meteor.userId(),
            userEmail:Meteor.user().username,
            category:cat,

        });
    }

   <template name="article">

     {{#each images}}
        <img src="{{this.url}}" alt="" class="thumbnail" />
        {{/each}}
    Here goes the {{name_of_post}}
    Here {{the_category}}
    Here {{the_description}}

    </template>

所以发生的事情是,到目前为止我上传的所有图片都显示在一个 post 中并且所有 post 的图片看起来都一样。请帮忙!

你应该知道 fsFile support Metadata 所以也许你不需要 Articles Collection

所以我们可以制作一个新的eventHandler

'click .save':function(evt,tmpl){
        var description = tmpl.find('.description').value,
            file = $('#uploadImagePost').get(0).files[0], //here we store the current file on the <input type="file">
            name = tmpl.find('.name').value,
            date=new Date(),
            cat = tmpl.find('.selectCat').value,
            fsFile = new FS.File(file); // we create an FS.File instance based on our file
          fsFile.metadata = {  //this is how we add Metadata aka Text to our files
                   description:description,
                   name:name,
                   time:date.toLocaleDateString()+' at '+date.toLocaleTimeString(),
                  author:Meteor.userId(),
                  userEmail:Meteor.user().username,
                  category:cat, 
                      }
          Images.insert(fsFile,function(err,result){
          if(!err){
            console.log(result) // here you should see the new fsFile instance
            }
       });
    }

这就是我们的新活动的外观,现在我们的 .save 按钮将所有内容插入同一个集合。

这就是我们如何使用关键字 'metadata.fieldName'.

访问 FS.File 实例字段

例如。

Teamplate.name.helpers({
  showCategory:function(){
    // var category = Session.get('currentCategory') you can pass whatever data 
    // you want here from a select on the html or whatever.
   //lets say our var its equal to 'Music'
    return Images.find({'metadata.category':category});
  } 
})

现在我们像任何普通集合一样在 html 上使用该助手

<template name="example">
  {{#each showCategory}}
    Hi my category is {{metadata.category}} <!-- we access the metadata fields like any normal field on other collection just remember to use the 'metadata'keyword -->
    This is my image <img src="{{this.url}}" >
  {{/each}}
</template>