从客户端javascript中获取Meteor集合中的数据

时间:2016-03-01 13:38:23

标签: javascript meteor

我需要在客户端javascript文件上访问集合以对数据进行排序并执行各种操作。目前我只使用find()findOne(),但它非常不一致,有时不会足够快地返回值,因此无效。

我是以正确的方式做到的吗?是否还提供了其他选项来检索和操作集合数据?

例如,我想找到这些数据:

data = Stats.findOne({
  name: Session.get('name')
}, {sort: {date: -1}});
variable = data.variable;

然后我想使用variable来过滤集合:

ranking = Stats.find({
  variable: variable
}, {sort: {score: -1}}).fetch();

我找不到它不起作用的原因。

1 个答案:

答案 0 :(得分:1)

Meteor是被动的,这意味着当Stats集合填充来自服务器的数据时,使用它的代码将自动重新运行。如果您尝试在屏幕上显示data,则需要使用帮助程序,reactive variable和自动运行功能。

JS:

Template.yourTemplate.onCreated( function() {
  var template = this;
  template.variable = new ReactiveVar( null );
  template.autorun( function() {
    var result = Stats.findOne({ name: Session.get('name') }, { sort: { date: -1 } });
    if( result && result.variable ) {
      template.variable.set( result.variable );
    }
  });
});

Template.yourTemplate.helpers({
  ranking() {
    return Stats.find({ variable: Template.instance().variable.get() }, { sort: { score: -1 } }).fetch();
  }
});

HTML:

<template name="yourTemplate">
  {{#each rank in ranking}}
    Do stuff with {{rank}}
  {{/each}}
</template>

这将确保您的被动变量随着会话变量的Stats.findOne()的变化而变化,并且您的模板可以适当地获得您想要的排名。