2015-06-02 6 views
0

У меня есть сценарий, который проходит через коллекцию фотодокументов, проверяет, соответствуют ли они текущему идентификатору пользователя, а затем отображает шаблон.Как отображать текст закладок, если нет документов, совпадающих с пользователем в Meteor?

<ul id="settings-photos"> 
    {{#each photos}} 
     {{#if person}} 
      {{> photo}} 
     {{/if}} 
    {{/each}} 
</ul> 

Если фотографий нет для пользователя, я хотел бы показать «Нажмите, чтобы загрузить фотографию!». сообщение. Как я напишу условие для этого в методе Spacebars/Meteor?

Мой person вспомогательный код выглядит следующим образом

person : function() { 
    user = Meteor.userId(); 
    photoUser = this.user; 
    console.log(this); 
    if(user == photoUser) { 
     return true; 
    } 
} 

EDIT: Я принял ответ, который привел меня к решению. Мой окончательный сценарий был

photos : function() { 
    var id = Meteor.userId(); 
    var photos = Photos.find({user: id}).fetch(); 

    return photos; 
} 

, а затем в HTML

<ul id="settings-photos"> 
    {{#each photos}} 
     {{> photo}} 
    {{/each}} 
    {{#unless photos}} 
     Click to upload an image 
    {{/unless}} 
</ul> 

ответ

1

Во время выполнения цикла через коллекцию фотографий и проверки пользователя будет работать, лучший способ сделать это было бы написать UI/шаблон помощник, который извлекает фотографию пользователя. Таким образом, если вы в конечном итоге меняете схему пользователя или коллекцию фотографий, вам нужно только изменить помощника.

Template.registerHelper(userPhoto, function(userId){ 
    var userPhoto = Photos.findOne({person: userId}); 
    if(userPhoto && userPhoto.photoUrl) { 
     return userPhoto.photoUrl; 
    } 
}) 

Таким образом, вы можете написать свой шаблон гораздо более чисто. Как и в,

<ul id="settings-photos"> 
    {{#if userPhoto currentUser._id}} 
     {{> userPhoto currentUser._id}} 
    {{else}} 
     <a href="#">No Photos found. Click here to upload</a> 
    {{/if}} 
</ul> 

Оригинал Ответ:


<ul id="settings-photos"> 
    {{#each photos}} 
     {{#if person}} 
      {{> photo}} 
     {{/if}} 
    {{/each}} 
    {{#unless photos}} 
     <a href="#">No Photos found. Click here to upload</a> 
    {{/unless}} 
</ul> 
+0

Это близко, но фото это пособ все фотографии пользователей, и это помощник 'person', который проверяет, является ли он правильным. '# if' будет запускаться только в этом случае, если у пользователей нет загруженных фотографий. – JacobPariseau

+0

Ах, ваше первое решение работает безупречно, пока я меняю свой помощник по фотографиям, чтобы вернуться только на основании правильного идентификатора пользователя, а затем избавиться от него. Я соглашусь с этим и напишу свой завершенный сценарий в своем вопросе – JacobPariseau

0

JS

Template.templateName.helpers({ 
    isPhoto: function(person){ 
    // your condition 
    return true/false; 
} 
}); 

Шаблон:

{{#if isPhoto person}} 
{{> Photo}} 
{{else}} 
Click to upload a photo! 
{{/if}} 
+0

Хотя это может ответить на вопрос, вы не добавили объяснения о том, как это работает, и его не так конструктивно. – Lucky