我订阅并发布如下:
publish.js:
Meteor.publish('ProductWithSkipAndLimit', function(skip,limit){
return Product.find({}, {
sort: {
createdAt: 1
},
skip: skip,
limit: limit
});
});
subscribe.js:
Meteor.subscribe('ProductWithSkipAndLimit',0,10);
它将从createdAt的0排序返回到客户端10的产品。 不,我点击这样的事件:
'click' : function(e){
e.preventDefault();
Meteor.subscribe('ProductWithSkipAndLimit',10,10);
}
我想再买10件产品。好吧,我得到的产品,但10个产品没有重置。所以在客户端我有20个产品。
我如何重置客户端订阅?所以客户每次订阅只有10个产品。
答案 0 :(得分:2)
Meteor.subscribe:
订阅记录集。返回提供stop()和ready()方法的句柄。
您需要处理Meteor.subscribe
subscription = Meteor.subscribe('ProductWithSkipAndLimit',10,10);
在事件对象中:
var subscription;
Template.NAME.events({
'click' : function(e){
e.preventDefault();
subscription && subscription.stop();
subscription = Meteor.subscribe('ProductWithSkipAndLimit',10,10);
}
})
答案 1 :(得分:-1)
我认为,在click
事件中,您必须设置会话变量Session.set('more', true);
在客户端:
Deps.autorun(function() {
if(Session.get('more')) {
Meteor.subscribe('ProductWithSkipAndLimit',10,10);
Session.set('more', false);
}
});
或者在集合中设置当前位置的一些逻辑(10,20等)
答案 2 :(得分:-1)
您询问了订阅重置问题,但看起来您无需手动执行此操作。
您可以在Tracker.autorun
内订阅,并将反应值作为订阅参数传递。
然后在每个skip
/ limit
会话变量上更改订阅将自动重置。
来自Meteor official documentation:
如果您在反应计算中调用Meteor.subscribe,例如使用Tracker.autorun,则在计算失效或停止时,订阅将自动取消;没有必要在内部自动运行中调用停止。
以下是工作示例(METEOR@1.1.0.2):
Items = new Meteor.Collection("items");
if(Meteor.isClient) {
Tracker.autorun(function() {
Meteor.subscribe("items", Session.get("skip"), Session.get("limit"));
});
Template.main.helpers({
items: function() {
return Items.find({});
}
});
Template.main.events({
'click #next' : function(e){
e.preventDefault();
var skip = Session.get("skip");
Session.set("skip", skip + Session.get("limit"));
},
'click #prev' : function(e){
e.preventDefault();
var skip = Session.get("skip");
Session.set("skip", skip - Session.get("limit"));
}
});
Meteor.startup(function() {
Session.set("skip", 0);
Session.set("limit", 10);
});
}
if(Meteor.isServer) {
if (Items.find({}).fetch().length < 100) {
_.times(100, function(n) {
Items.insert({
name: String(n),
createdAt: new Date()
});
});
}
Meteor.publish("items", function(skip, limit) {
return Items.find({}, { limit: limit, skip: skip, sort: { createdAt: 1} });
});
}
模板
<template name="main">
<header>
<h1>Items</h1>
<nav>
<button id="prev">prev</button>
<button id="next">next</button>
</nav>
</header>
<ul>
{{#each items}}
<li>{{name}}</li>
{{/each}}
</ul>
</template>
P.S。不要忘记删除&#34; autopublish&#34;封装