0

CollectionFs を使用してプロフィール写真をアップロードしています。画像のアップロードと保存に成功しました。1 人のユーザーの画像を挿入して表示することはできますが、問題は次のとおりです。

ヘルパー関数にある mongo クエリが問題の原因であることは理解していますが、「This._id」をいくつ試しても機能しません。

ここにJavaScriptがあります

 Router.route('show',{
  path:'/list/:_id',
  data: function(){
return Main_database.findOne({_id: this.params._id});


  }

});

 Template.upload.events({
  'change #exampleInput':function(event, template){  
    var file = $('#exampleInput').get(0).files[0]; 
    fsFile = new FS.File(file);
    fsFile.metadata = {ownerId:Meteor.userId()}
    Images.insert(fsFile,function(err,result){
      if(!err){
        console.log("New images inserted")
      }
    })
  }
});

Template.profile.helpers({
    profilePic: function () {
      return Images.find({'metadata.ownerId':Meteor.userId()});
    }
  });

そして、ここにhtmlがあります:

<template name="upload">
  <div class="container">
     <div class="row">
        <input type="file" 
        id="exampleInput"> 
     </div>  
  </div>
</template>


 
<template name="profile">

       {{#each profilePic}}       
          <img src="{{this.url}}" 
          height="400" width="400" 
          class="img-circle">
       {{/each}}  
 
</template>
ありがとう

Bs : 与えられた回答に従って、profile.xxx フィールドに写真を添付し​​ました。しかし、それでも間違った画像が表示されます。mongo クエリはまだ間違った画像を表示しています。

ここにコードがあります、

Router.route('show',{
  path:'/list/:_id',
  data: function(){
return Main_database.findOne({_id: this.params._id});


  }

});

Template.upload.events({
  'change #exampleInput':function(event, template){  
    var file = $('#exampleInput').get(0).files[0]; 
    newFile = new FS.File(file);
    newFile.metadata = {'ownerId':Meteor.userId()};
    Images.insert(newFile,function(err,result){
      if(!err){
        console.log(result._id);
        Meteor.users.update(Meteor.userId(),{
       $set: {
         'profile.profilePic': result._id

       }
     });
       }
     });

      }
    })



// .....................profile pic.............


Template.profile.helpers({
    profilePicture: function () {
      return Images.find({'_id':Meteor.user().profile.profilePic});
    }
  });

4

3 に答える 3

0

まず最初に、現在ログインしているユーザーのデータMeteor.user()Meteor.userId()常に表示します。

したがって、ユーザーが自分のプロファイルを見たい場合は、現在のテンプレート ヘルパーを次のように使用するのが適切です。

Template.profile.helpers({
    profilePic: function () {
        return Images.find({'metadata.ownerId':Meteor.userId()});
    }
});

ただし、ユーザーが別のユーザーのプロファイルに移動した場合は、次のようにそのユーザーの情報を取得する必要がありますMeteor.user("another-user-id")

では、これを行う方法は?Iron Router または Flow Router を使用して Meteor アプリでルーティングを設定し、ユーザー プロファイル ページのルート パスを次のように設定したとします/user/:_id

ここで、次publishのようなこのユーザーのデータのみを 上のパブリケーションに含める必要がありますserver

Meteor.publish("userData", function(userId){
    return = Meteor.users.find({"_id": userId});
});

...そしてsubscribeこれpublicationまでclient(テンプレート レベルのサブスクリプションを使用します!)

  1. 鉄のルーターを使用:

    var userId;
    
    Template.profile.onCreated(function() {
        var self = this;
        self.autorun(function() {
            userId = Router.current().params._id;
            self.subscribe("userData", userId);
        }
    });
    
    Template.profile.helpers({
        profilePic: function () {
            return Images.find({'metadata.ownerId': userId});
        }
    });
    
  2. フロールーターを使用:

    var userId;
    
    Template.profile.onCreated(function() {
        var self = this;
        self.autorun(function() {
            userId = FlowRouter.getParam("_id");
            self.subscribe("userData", userId);
        }
    });
    
    Template.profile.helpers({
        profilePic: function () {
            return Images.find({'metadata.ownerId': userId});
        }
    });
    
于 2015-09-29T18:04:16.953 に答える