【问题标题】:Meteor: Template always returns trueMeteor:模板总是返回 true
【发布时间】:2023-03-14 13:41:01
【问题描述】:

在我的网络应用程序中,一些“新闻和事件条目”有封面图片,有些没有(图片存储在 CollectionFS 中)。这是一个带有图像的示例(键是 coverImageId):

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 就足够了。

助手:

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 } });
  }
}); 

非常感谢任何帮助。

【问题讨论】:

    标签: mongodb templates meteor handlebars.js collectionfs


    【解决方案1】:

    find 返回一个游标,它是一个对象,并且总是评估为真。你想要:

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

    【讨论】:

    • elsepart 中仍然返回true :(
    • 所以我认为如果 NewsEvent 没有coverImageId,您希望它返回false。起初我误解了这个问题。试试修改后的代码。
    • 可能是!!(event &amp;&amp; event.coverImageId)
    • @StephenWoods:就是这样。太感谢了。但是为什么return NewsEvents.findOne({_id:this._id},{coverImageId: { $exists: true } }); 不起作用?
    • @DavidWeldon !!(event &amp;&amp; event.coverImageId)在终端中抛出错误。无论如何,我非常喜欢你的答案网站dweldon.silvrback.com :) 和你的答案在 SO :)
    猜你喜欢
    • 2020-02-19
    • 2015-07-20
    • 2013-08-06
    • 2017-05-10
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多