使用铁路由器过滤收集

时间:2017-02-09 17:40:15

标签: meteor iron-router

我有一个模板使用{{#each Collection}}渲染我的收藏夹,我使用铁路由器来路由此模板:

Router.route('/home', function () {
this.render('home');
this.layout('header');
});

我怎样才能使用"书籍"过滤器按钮,因此铁路由器将该过滤器应用于订阅,因此我只能看到我的集合的过滤版本,如下所示:

Collection.find({category: "books"});

2 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,但一种简单的方法是定义一个以类别为参数的子路径:

Router.route('/collections/:category',{
  name: 'collections',
  layoutTemplate: 'header',
  data(){
    return Collections.find({category: this.params.category});
  }
});

然后您的按钮代码可以Router.go('/collections/books'),但您现在可以拥有多个按钮,每个按钮都绑定到不同的类别。

答案 1 :(得分:0)

根据此处https://guide.meteor.com/data-loading.html#organizing-subscriptions的建议,您可以在模板中管理订阅,而不是在路线中。所以你可以这样做:

import {ReactiveDict} from 'meteor/reactive-dict';
import {Template} from 'meteor/templating';

Template.home.onCreated(function(){
  var that = this;
  that.state = new ReactiveDict();
  //that.state.set('selected-category',YOUR_DEFAULT_CATEGORY);
  that.autorun(function(){
    that.subscribe('subscription-name',that.state.get('selected-category'));
  });
});

Template.home.events({
  'click .js-category':function(e,tpl){
    let category = tpl.$(e.currentTarget).data('category');
    tpl.state.set('selected-category',category); 
  }
}); 

在你的模板中:

<button type="button" data-category="books" class="js-category">Books</button>

希望这有助于您找到适合您的

的解决方案