2017-05-01 2 views
1

Jeder Benutzer hat einen Gravatar oder ein Profilbild, wenn hochgeladen. Eine Liste der Räume wird gezeigt (jeder hat 2 Parteien). Es zeigt das Gegenteil gravatar/hochgeladene Bild und seinen oder ihren Benutzernamen.Meteor Gravatar erscheint auf der Benutzerseite, aber nicht in der Liste der Räume

Problem: Die Gravatars erscheinen nicht, aber die hochgeladenen Bilder (wenn hochgeladen) erscheinen. Gravatar erscheint auf der Profilseite des Benutzers (mit Parametern als userId).

In der Konsole kehrt Meteor.user() und Meteor.userId() zurück, ok. Das ist der md5hash, der korrekte Benutzerdetails zurückgibt.

das Profil des Benutzers:

profileImg 
    - uploaded 
username 
md5hash 
emails 

Jedes Zimmer enthält

owner, receiver, people: [owner, receiver], id //roomId 

allRooms.js

Template.allRooms.onCreated(function() { 
     this.autorun(() => { 
      this.subscribe('rooms'); 
      this.subscribe('allUsers'); 
      $.cloudinary.config({ cloud_name: "mthh" }); 
     }); 
    }); 
    Template.allRooms.helpers({ 
     chatPerson(){ 
      return this.owner === Meteor.userId() ? Meteor.users.findOne(this.receiver) : Meteor.users.findOne(this.owner); 
     }, 
    }); 

allRooms.html

{{#each rooms}} 

    {{#with chatPerson}} <!-- doesnt work if {{#if chatPerson}} ..nothing shows --> 
     {{#if profileImg.upload}} 
      <img src="{{c.url profileImg.upload format=format gravity='faces' mode='thumb' crop='thumb' width=60 height=60}}"> <!-- uploaded pic shows up --> 
     {{else}} 
      <div class="avatar" style="background: url({{ avatar 60 chatPerson}}; height: 60px; width: 60px; float:left;"></div> <!-- if no uploaded pic, gravatar doesnt show up but console.log shows user object details and md5hash number --> 
     {{/if}} 
    {{/with}} 

    {{chatPerson.username}} roomId: {{_id}} <!-- shows up --> 
{{/each}} 

Publikation

Meteor.publish('allUsers',() => { 
    return Meteor.users.find({ 
     fields: { username: 1, emails: 1, profileImg: 1, md5hash: 1} 
    }) 
}); 
+0

Können Sie nach Ihren Publikationen als Referenz hier? –

Antwort

1

Angenommen, Sie einen Helfer verwenden den Avatar-URL wie zu generieren:

Template.registerHelper('avatar',(avatarSize, user) => { 
    let md5hash = (user && user.md5hash) ? user.md5hash : this.md5hash;  
    md5hash = md5hash || "3eda6fcd3204ef285fa52176c28c4d3e"; // Equivalent to Gravatar.hash('[email protected]'); 
    return Gravatar.imageUrl(md5hash, { secure: true, size: avatarSize, d: 'mm', rating: 'pg' }); 
}); 

Dann Sie es passieren müssen ein gültiges Benutzerobjekt In Ihrem Code:

<div class="avatar" style="background: url({{ avatar 60 currentUser}}; height: 60px; width: 60px; float:left;"></div> 

currentUser ist nicht definiert. Ersetzen Sie, dass mit this, die der Benutzerkontext in Ihrem {{#with}} Block:

<div class="avatar" style="background: url({{ avatar 60 this}}; height: 60px; width: 60px; float:left;"></div> 
+0

'currentUser' ist nur ein aussagender Variablenname. Was auch immer Sie dort setzen, muss zu einem 'Benutzer'-Objekt aufgelöst werden, das eine 'md5hash'-Eigenschaft besitzt. –

+0

'this' hat nicht funktioniert, weder' this.user' noch 'this.chatPerson'. hmm Lass es mich wissen, wenn du ein paar Tests brauchst? Ich kann hier Ergebnisse posten. – Thinkerer

+0

Fehler beim Ausschneiden/Einfügen in meinem Template-Hilfscode behoben ... Versuchen Sie, einen Breakpoint zu setzen oder 'console.log (user)' im 'avatar'-Helfer auszuführen und sicherzustellen, dass der Helfer ein ihm übergebenes Benutzerobjekt erhält dass das Objekt einen 'md5hash' Schlüssel hat. –

Verwandte Themen