【发布时间】:2014-09-20 08:14:28
【问题描述】:
所以我正在使用 Iron-Router 构建一个多页 Meteor 应用程序。在一个页面(不是主页)上,我有一个从集合中显示的项目列表,其中 Iron-Router“等待”来自集合的数据,其限制取决于 Session 变量。
当按下加载更多按钮时,会话变量会发生变化,并且页面会重新加载更多项目。
我想要做的就是在旧的加载更多按钮的位置重新加载页面(新按钮放在新列表的末尾),或者以某种方式使这个过渡更清晰。请参阅http://microscope.meteor.com/ 以获得完美的示例。
HTML:
<template name="postsList">
{{#each postsWithRank}}
{{> postItem}}
{{/each}}
{{#if moreResults}}
{{> loadMore}}
{{/if}}
</template>
<template name="loadMore">
<a class="load-more">Load more</a>
</template>
帮手:
Template.postsList.helpers({
postsWithRank: function() {
Posts.find({category: this.title}).rewind();
return Posts.find({category: this.title}).map(function(post, index, cursor) {
post._rank = index;
return post;
});
},
moreResults: function() {
return parseInt(Session.get('limit')) == Posts.find().fetch().length;
}
});
Template.loadMore.events({
"click": function(event) {
event.preventDefault();
Session.set("limit", Session.get("limit") + 10);
}
})
路由器:
listingPageController = RouteController.extend({
template: 'listingPage',
sort: {submitted: -1, _id: -1},
limit: function() {return Session.get('limit')},
findOptions: function() {
return {sort: this.sort, title: this.params.title, limit: this.limit()};
},
waitOn: function() {
return Meteor.subscribe("posts", this.findOptions());
},
data: function() {
return Listings.findOne({title: this.params.title})
}
});
谢谢!
所以我没有用于 postsList 模板的路由器代码。 postsList 模板在 listingPage 模板中呈现,如下所示:
<template name="listingPage">
<!--main-->
<div class="container">
<div class="row">
{{>leftBarListingPage}}
<!--right-->
<div class="col-md-9">
<h2 id="sec1">
<div class="listingPageHeader">
<div style= "text-transform:capitalize"> Posts in</div>
<div class="smallListings"> </div>
{{title}} </div>
</h2>
<p>
<div class="posts">
{{> postsList}}
</div>
</p>
</div><!--/right-->
{{title}} 属性来自 listingPageController,它与两个 Collections 一起使用 -> 一个 Listings 集合(用于静态父类别)和一个 Posts 集合(用于这些类别中的帖子)
【问题讨论】:
标签: javascript meteor real-time reload iron-router