确定集合是否准备就绪并且文档是否存在

时间:2013-04-23 19:35:08

标签: meteor

假设我有一个显示来自mongodb集合的记录的页面:

var item = Items.findOne({name: documentName});
Session.set('item', item);

当集合准备就绪以及找到结果时,这将使用项目更新我的模板。现在我可以假设当Session.get('item')未定义数据正在加载并向用户显示加载图形或消息时。但是,如果文档不存在,我不想无限期地向用户显示加载消息,我宁愿显示“未找到”消息。如果记录根本不存在,我如何确定并告知用户?

我想到了:

  1. 将项会话变量设置为'loaded'
  2. 在具有该值的情况下显示加载消息
  3. 然后在集合返回undefined或文档时显示项目或“未找到”消息。
  4. 然而,这不起作用,因为查询将立即返回undefined,直到集合可用,然后如果查询完成且值仍然未定义,则没有更改,并且会话变量不会更新。

    我觉得我错过了一些正好在我面前的技巧!有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您的解决方案应该用于显示“加载”消息。

要显示“NOT FOUND”消息,请在模板助手中检查查询结果的类型。当集合中没有记录时,结果将为undefined

    Template.items.item = function(){
      var item = Items.findOne({name: documentName});
      if(typeof item == 'undefined'){
         return null;
      }
      else{
         return item;
      }
    }

在html代码中,使用{{#if}}..{{else}}..{{/if}}阻止帮助程序:

    {{#if item}}
       <!-- Display your template data here -->
    {{else}}
       <!-- The template helper returned null, so display message here -->
       <span>NOT FOUND</span>           
    {{/if}}

希望这有帮助。