有没有办法检测同一路线内的变化?

时间:2015-07-02 05:09:35

标签: javascript meteor iron-router

使用Iron Router,我有以下路由设置:

Router.route('/:cat', {
    name: "goods",
    waitOn: function() {
        Session.setDefault('limit', 20)
        var limit = Session.get('limit') || 20
        Meteor.subscribe('goods', this.params.cat, limit)
    }
})

这个想法是用户可以按下一串按钮来更改cat(egory),过滤掉一些数据但保留在同一路线上。经典的东西。

现在它只设置默认limit为20,当用户向下滚动时,它会增加。如果他单击按钮更改类别,则立即加载100个新项目没有意义,但将limit再次设置为20。

问题是,我无法想到一个好方法。删除setDefault以使用Session.set将无效。我现在能想到的就是在cat中记录Session并使用它来检查类别是否已被更改,但我希望有更好的方法。

1 个答案:

答案 0 :(得分:0)

如何使用模板来管理状态(而不是会话和路由。

例如,使用重新激活变量(reactive-var包),并通过路径将类别传递给模板。这样 - 类别可以链接到(并根据需要扩展/限制限制)。

首先实例化模板

Template.limitedDatasource.created = function() {
  this.data.limitVar = new ReactiveVar(20);
  this.data.dsSub = Meteor.subscribe('goods', this.data.category, this.data.limitVar.get())
}

添加一些模板级帮助程序来管理订阅准备和数据

Template.limitedDatasource.helpers({
    dataSourceReady: function() {
        return this.dsSub.ready();
    },
    dataSource: function() {
        return CollectioName.find({cat: this.category}, {limit: this.limitVar.get()});
    }
});

添加一些事件处理程序以加载更多内容(可能更改限制?)

Template.limitedDatasource.events({
    'click .showMore': function(event, template) {
        event.preventDefault();
        var newLimit = template.data.limitVar.get() + 20;
        template.data.limitVar.set(newLimit);
    },

});