2016-03-02 7 views
0

В моем веб-приложении некоторые «новости и события-записи» имеют обложки, некоторые - нет (изображения хранятся в CollectionFS). Вот пример с изображением (ключ coverImageId):Meteor: Шаблон всегда возвращает true

JSON:

{ 
    "_id" : "gDPwfDJFxh3y7NBBK", 
    "title" : "EGOS 2015 reminder: Open Organizations for an Open Society?", 
    "description" : "\n\t\t   \t\t\n\t\t   \t\tOpen Organizations for an Open Society? Practicing Openness in Innovation, Strategy and Beyond; Convenors: Leonhard Dobusch, Freie Universität Berlin, Georg von Krogh, ETH Zurich, Switzerland, Richard Whittington, Oxford University, Link to website: : http://bit.ly/EGOS15Open\n\t\t   \t\n\t\t   \t", 
    "type" : "news", 
    "createdAt" : ISODate("2016-02-28T20:30:09.316Z"), 
    "coverImageId" : "teEfXMANGbSn4vWkD" 
} 

Шаблон:

<div class="row text-left"> 
    {{#each newsEventsData}} 
    <div class="col-sm-4"> 
     <div class="caption"> 
     {{#if imageExists}}  
      <h4>TRUE {{title}}<img alt="news thumbnail" class="news-thumbnail" src="{{ coverImage.url }}" /></h4> 
     {{else}} 
      <h4>FALSE {{title}}</h4> 
     {{/if}}           
     <p class="text-muted">{{{description}}} <a href="{{pathFor route = 'newsAndEventsPage'}}" class="textlink">read more </a></p> 
    </div> 
    </div> 
    {{/each}} 
</div> <!-- ROW --> 

Если есть изображение, изображение показано на рисунке. Итак, это работает. Тем не менее, часть else никогда не отображается. Я предполагаю, что мой помощник возвращает true, потому что этого достаточно, если один документ содержит coverImageId.

Helper:

Template.allNewsEvents.helpers({ 
    newsEventsData: function() { 
    if(Session.equals("newsEventsSeeMore","no")) { 
     return NewsEvents.find({type: { $in: Session.get('newsEventsViewMain')}}, {sort: {createdAt: -1}, limit: 3}); 
    } 
    else { 
     return NewsEvents.find({type: { $in: Session.get('newsEventsViewMain')}}, {sort: {createdAt: -1}}); 
    } 
    }, 
    imageExists: function() { 
    return NewsEvents.find({_id:this._id},{coverImageId: { $exists: true } }); 
    } 
}); 

Любая помощь очень ценна.

ответ

1

find возвращает курсор, который является объектом, и всегда будет оценивать значение true. Вы хотите:

imageExists: function() { 
    var event = NewsEvents.findOne({_id:this._id}); 
    if(event && event.coverImageId) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
+0

еще возвращает истину в '' 'else'''part :( –

+1

Так что я думаю, что вы хотите, чтобы вернуться ложным, если NewsEvent не имеет coverImageId я непонимание вопроса в. сначала нужно попробовать отредактированный код –

+1

Может быть, '!! (event && event.coverImageId)'. –