有没有办法检测同一路线内的变化?
Is there a way to detect changes within the same route?
使用 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
将不起作用。我现在能想到的就是在 Session
中记录 cat
并用它来检查类别是否已更改,但我希望有更好的方法。
如何使用模板来管理状态(而不是会话和路由。
例如,使用重新激活变量(reactive-var 包),并通过路由将类别传递给模板。这样 - 类别可以链接到(并根据需要限制 expanded/limited)。
从实例化模板开始
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);
},
});
使用 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
将不起作用。我现在能想到的就是在 Session
中记录 cat
并用它来检查类别是否已更改,但我希望有更好的方法。
如何使用模板来管理状态(而不是会话和路由。
例如,使用重新激活变量(reactive-var 包),并通过路由将类别传递给模板。这样 - 类别可以链接到(并根据需要限制 expanded/limited)。
从实例化模板开始
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);
},
});