Meteor JS PubSub基于动作

时间:2016-07-23 09:44:45

标签: javascript meteor

我需要您关于刷新功能的帮助或建议。我有一个名为refresh的按钮,当点击它时它会刷新(根据createdAt字段重新排列数据排序)。我一直在努力争取通过重新订阅来解决这个问题几天,我不确定这是不是正确的方法。

点击按钮时,是否有正确的方法在客户端上重新订阅或重新排序集合?非常感谢。

1 个答案:

答案 0 :(得分:1)

是的,您可以按照以下步骤执行此操作:

  • 将排序类型(asc或desc)传递给路由器查询。
  • 更新服务器的订阅排序。
  • 您还需要更新客户端find()方法排序,因为当您的重新订阅数据没有更改或文档得到更新时,最早的数据总是会出现。
  • 您可以在路由器级别或模板级别订阅或重新订阅集合。如果您正在使用Flow Rotuer,那么您的重新订阅将无法正常工作,因为流路由器不是被动的。我更喜欢在模板级别使用订阅。使用Iron路由器查询。

以下是代码示例:

Templete.templeteName.onRendered(function(){
   this.autorun(function(){
        var sort = {};
       if(!Router.current().params.query || Router.current().params.query.sortType == 1 ) {
           sort.createdAt  = 1;
       } else {
           sort.createdAt  = -1;
       }
       //You can use this handle to show/hide loader.
       var handle = Meteor.Subscribe('subscriptionName', sort);
   })
})
Templete.templeteName.helpers({ 
   'data' : function(){
      var sort = {};
      if(!Router.current().params.query || Router.current().params.query == 1 ) {
           sort.createdAt  = 1;
       } else {
           sort.createdAt  = -1;
       }

      return collection.find({},{sort:sort});
   }
});

Templete.templeteName.events({ 
     'click .refresh' : function(){
         var sortType = value //get the value -1 or 1 from html.
         Router.go('routeNaem',{},{query:{sortType:sortType}})
     }
});