使用#each迭代Meteor游标会出错

时间:2017-10-13 05:41:00

标签: templates meteor each

我有以下代码并且正在

  

{{#each}}目前只接受数组,游标或falsey值

HTML:

vt_1

使用Javascript:

<template name='subscribers'>
  {{#each stat in getPythonStats "WNScan"}}
  <div>
    {{stat.name}}: {{stat.value}}
  </div>
  {{/each}}
</template>

控制台输出:

Template.subscribers.helpers({
  getPythonStats(server) {
    var status = WNstatus.find({'server': server});
    if (!status)
      status = [{'status': 'shutdown'}, {'count': 0}, {'startTime': 'Never'}, {'runTime': 0}];
    console.log(status);
    return status;
  }
});

看起来像我的光标。我一开始认为问题在于{_id: M…D.ObjectID, server: "WNScan", status: "shutdown", startTime: "2017-10-10 22:40:12", runTime: 5.39, …} 混淆getPythonStats的论点,但是自从调用帮助器以来,这似乎不是问题所在。我已经尝试了#eachcollection.find(它们返回相同的结果,因为从不会有多个文档满足查询),结果相同。我在其他地方使用collection.findOne几乎完全相同的代码,并且工作正常。此外,如果找不到{{with getPythonStats "WNScan"}}文档,则返回的数组会产生相同的错误。这是最新的1.5版Meteor。

1 个答案:

答案 0 :(得分:4)

据我了解,您希望迭代status中的每个键,但 #each需要数组或光标status不是!

collection.find返回一个游标,collection.findOne返回一个文档(不是文档数组)。

使用collection.findOne的{​​{1}}相当于collection.find

使用Javascript:

collection.find().fetch()[0]

HTML

const defaultStatus = {
  status: 'shutdown',
  count: 0,
  startTime: 'Never',
  runTime: 0
};
Template.subscribers.helpers({
    getPythonStats(server) {
        const status = WNstatus.findOne({ 'server': server});
        console.log(status);
        return _.pairs(status || defaultStatus);
    }
});

_.pairs() documentation