[英]Strange behavior of the collection MeteorJS
我收集了一些簡單的文檔,例如{title:"some title", routes:{first:"sport",second:"football"}}
並且有一些類別,例如
[{
name: "sport",
children: {[
{
name: "football",
},
{
name: "basketball
}
]}
},
{
//....
}
///...
]
問題:當我將beetwen 2條路線(例如“ / sport / football”和“ / 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
}]}
});
});
它像設計一樣工作
注意: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();
},
這樣,您僅在訂閱准備就緒時才返回,這意味着在某些情況下您查看的內容將為空!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.