Vulcan/client/views/users/profile/user_posts.js

61 lines
1.8 KiB
JavaScript
Raw Normal View History

2014-12-08 14:53:26 +09:00
Template[getTemplate('userPosts')].created = function () {
var user = this.data;
var instance = this;
2014-12-09 13:16:34 +09:00
// initialize the terms reactive variable
instance.terms = new ReactiveVar({
view: 'userPosts',
userId: user._id,
2014-12-09 13:16:34 +09:00
limit: 5,
previousLimit: 0 // should always be equal to limit's previous value
});
2014-12-09 13:16:34 +09:00
// initialize the posts cursor ReVar
2014-12-08 18:03:30 +09:00
instance.posts = new ReactiveVar({});
2014-12-09 13:16:34 +09:00
// initialize the subscription handle ReVar
instance.subscription = new ReactiveVar({});
// will re-run when the "terms" or "subscription" reactive variables change
2014-12-18 10:36:41 +09:00
this.autorun(function () {
2014-12-08 18:03:30 +09:00
// get the new terms and generate new parameters from them
var terms = instance.terms.get();
var parameters = getPostsParameters(terms);
// subscribe to the userPosts publication
2014-12-09 13:16:34 +09:00
instance.subscription.set(Meteor.subscribe('userPosts', terms));
// until subscription is ready, overwrite limit to restrict number of posts to previousLimit
if (!instance.subscription.get().ready())
parameters.options.limit = terms.previousLimit
2014-12-08 18:03:30 +09:00
// update the instance's "posts" cursor
instance.posts.set(Posts.find(parameters.find, parameters.options));
2014-12-09 13:16:34 +09:00
});
2014-12-08 14:53:26 +09:00
};
Template[getTemplate('userPosts')].helpers({
posts: function () {
2014-12-08 18:03:30 +09:00
return Template.instance().posts.get();
2014-12-08 14:53:26 +09:00
},
isReady: function () {
2014-12-09 13:16:34 +09:00
return Template.instance().subscription.get().ready();
},
2014-12-08 14:53:26 +09:00
hasMorePosts: function () {
2014-12-09 13:16:34 +09:00
return Template.instance().posts.get().count() >= Template.instance().terms.get().previousLimit;
2014-12-08 14:53:26 +09:00
}
});
Template[getTemplate('userPosts')].events({
'click .posts-more': function (e) {
e.preventDefault();
var terms = Template.instance().terms.get();
2014-12-09 13:16:34 +09:00
// previousLimit starts at 0, so by increasing both values by 5 we keep them 5 apart
terms.previousLimit += 5;
terms.limit += 5;
Template.instance().terms.set(terms)
2014-12-08 14:53:26 +09:00
}
});