我正在寻找一种方法,在我的模板组中检索集合"Questions"的3个文档,其中包含近50个文档。在模板中显示前3个文档(问题)后,用户应该决定(按下按钮)是要检索接下来的3个文档还是只完成。
我还没有找到把问题从3题增加到3题的方法。这是我的代码:
collections.js:
Questions = new Mongo.Collection("questions");
myapp.js:
var lastQ=0
Template.questions.helpers ({
getGroupQuestions: function(){
//Ideally if I only query one time the entire collection, and store in local var
var listOfQuest = Questions.find({$and: [ {qNumber: {$nin: answeredQ}}, {qNumber:{$gt:lastQ}}]}, {sort:{qNumber:1}});
lastQ = lastQ + 3;
return {"Obj1":listOfQuest.fetch()[0], "Obj2":listOfQuest.fetch()[1], "Obj3":listOfQuest.fetch()[2]}; //This is not working, the returned object cant be read in template
}
});
myapp.html:
<template name="questions">
<h4> Tell us a little about yourself: </h4>
<form class="js-add-answers" id="add-answers">
{{#each getGroupQuestions}}
<label for="{{qNumber}}">{{qDescription}}</label>
<input type="text" class="form-control" id="{{qNumber}}" placeholder="{{qHints}}"/>
<p></p>
{{/each}}
<button class="btn btn-warning js-join-event">Save and Join</button>
<button class="btn btn-warning js-load-more">Save and load more Q</button>
</form>
</template>
我从你的问题中看到的,我所能告诉你的是,在获取文档时,你只需要在函数中使用skip和limit。理想情况下,您应该先删除"不安全"one_answers"自动发布"包,并在代码中使用PUB/SUB技术。
以下是您可以用来获得所需结果的代码。
在服务器端,您应该发布带有跳过计数的代码。
PROJECT/server/publish.js
Meteor.publish('getGroupQuestions', function(skipcount){
return Questions.find(
{$and: [ {qNumber : {$nin: answeredQ}},
{sort : {qNumber:1}}
},{limit : 3, skip : skipCount}
});
});
在客户端声明以下代码为会话变量,相应地跳过3条记录;
client/template/myapp.js
Session.setDefault('skip', 0);
Deps.autorun(function(){
Meteor.subscribe('getGroupQuestions', Session.get('skip'));
});
Template.questions.events ({
"submit .load-more" : function() {
Session.set(Session.get('skip') + 3)
}
});
在myapp.html中,您必须进行一个小的更改,并按以下方式命名按钮;
client/template/myapp.html
<button name="load-more" class="btn btn-warning js-load-more">Save and load more Q</button>
流程说明
- 最初,当页面加载时,它会根据逻辑为您提供前3个结果
- 当用户单击加载更多的按钮时,模板事件被调用,会话被设置为新值"skip"(增加3)
- 由于Meteor的重新活动和异步行为,发布容器将通过再次启动相同的查询,但在会话中使用新的跳过计数器,自动更新具有接下来3个问题的集合。页面甚至不会刷新,您将看到新的一组问题