MeteorJS集合的奇怪行为
Strange behavior of the collection MeteorJS
我收集了像{title:"some title", routes:{first:"sport",second:"football"}}
这样的简单文档,并有一些像这样的类别
[{
name: "sport",
children: {[
{
name: "football",
},
{
name: "basketball
}
]}
},
{
//....
}
///...
]
问题:当我切换甜菜文2条路线,如"/sport/足球"answers"/sport/basketball"1秒钟时,我会看到来自另一条路线的帖子,如这里:
1) "/sport/football"
(I see)
- post1
- post2
2) go to "/sport/basketball"
(for <1 second I see)
- post1
- post2
- post3
- post4
3)"/sport/basketball"
(after <1 second I see)
- post3
- post4
/// Code
Template.third_level.onCreated(function(){
var self = this;
self.autorun(function() {
var second_route = Session.get("current_route").params.name_second;
var first_route = Session.get("current_route").params.name;;
self.subscribe('posts_levels', first_route, second_route);
});
});
Template.third_level.helpers({
third_level:function(){
return Posts.find();
},
});
<template name="third_level">
{{#if Template.subscriptionsReady}}
{{#each third_level}}
{{> third_category}}
{{/each}}
{{/if}}
</template>
Tracker.autorun(function() {
FlowRouter.watchPathChange();
var currentContext = FlowRouter.current().path;
Session.set("current_route",{
path: currentContext,
params: FlowRouter.current().params
});
});
Meteor.publish("posts_levels", function(route_one, route_two){
check(route_one , String);
check(route_two , String);
return Posts.find({
routes: { $in : [{
first: route_one,
second: route_two
}]}
});
});
它的工作原理与设计的类似
- 您的本地收藏有项目1和2
- 更改订阅后,您的收藏仍有1和2
- ddp会向您发送消息:{added:3}、{added:4}、{removed:1}和{removed:2}
注意:DDP为每次插入/删除/更新发送一条自己的消息,而不是作为一条消息
因此,与其假设和希望您的集合只有您需要的数据,并通过Collection.find()
显示整个集合,不如在客户端上执行查询,这样您只显示您想要的内容。。
所以不是:
third_level:function(){
return Posts.find();
},
做这个
third_level:function(){
// get stuff from session, like in publication
var first = Session.get // ..
var second = Session.get // ..
return Posts.find({routes: { $in : [{
first: first,
second: second
}]}});
},
通过这种方式,您将只看到所需的项目,并且集合可以更新其方式,而不会产生奇怪的副作用。
另一种解决方法:假设您知道,在订阅准备好后,您可以公开整个集合。。好的:
third_level:function() {
if (Template.instance().subscriptionsReady())
return Posts.find();
},
这样,只有在订阅准备就绪时才返回,这意味着对于某些ms,您查看的内容将为空!
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Meteor-将选定窗体中的对象添加到集合中
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 主干集合重置和解析
- 使用数据上的角度更改设置集合的第一个元素的动画
- 为集合分配大量的模型弹药
- 如何使用backbone.js从集合中获取模型名称
- Lodash从集合创建集合
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- MeteorJS:用户集合如何公开新字段
- 防止MeteorJS集合中的重复(通过表单)
- MeteorJS集合未定义
- 有没有办法让集合在 MeteorJS 上以块的形式发布数据
- 关系问题-Mongo集合和MeteorJS
- 如何在Meteorjs中从多个文件访问集合
- MeteorJS集合的奇怪行为
- 如果集合在MeteorJS中为null或不为null,则显示模板
- Meteorjs和mongodb:如何将多个集合组合成一个
- Meteorjs使用输入选择多个和推入集合
- MeteorJS在集合量很大时订阅使用情况