示例:如果我选择葡萄,我想订阅grapes
集合,取消订阅所有其他集合,然后呈现新模板。如何选择新选项并采取相应措施?
<select>
<option value="choose fruit">
<option value="grapes">
<option value="strawberries">
</select>
谢谢!
答案 0 :(得分:2)
假设您有一个select
元素的模板,如下所示:
<template name="hello">
<select class="fruit">
<option value="grapes">grapes</option>
<option value="strawberries">strawberries</option>
</select>
</template>
然后您可以添加一个change
事件,您可以使用该事件来确定路线:
Template.hello.events({
'change .fruit': function (event) {
var value = $(event.target).val();
var routeName = routeNameFromFruit(value);
Router.go(routeName);
}
});
我假设您使用的是铁路由器,因此Router.go
可用。
如果您使用的是IR,则可以使用waitOn管理订阅更改。如果没有,那么您可以设置会话变量并使用全局autorun来启动和停止订阅。
答案 1 :(得分:0)
详细说明
如果没有,则可以设置会话变量并使用全局自动运行来启动和停止订阅。
要在更改会话变量时自动取消订阅并重新订阅,您可以使用Deps.autorun
:
Deps.autorun(function () {
if (!isTheFruitsPage(Router.current())) return;
var fruit = Session.get("selectedFruit");
if (fruit === "grapes") {
Meteor.subscribe("grapes");
} else if (fruit === "strawberries") {
Meteor.subscribe("strawberries");
}
});
每次selectedFruit
会话变量更改或当前页面发生更改时,Meteor都会取消订阅自动运行(如果有)之前的订阅,然后重新运行该功能。它也非常聪明,可以避免取消订阅和重新订阅任何不会发生变化的订阅。