我需要在客户端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();
我找不到它不起作用的原因。
答案 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()
的变化而变化,并且您的模板可以适当地获得您想要的排名。