使用选择下拉列表更改模板和订阅

时间:2014-05-13 16:57:52

标签: meteor

示例:如果我选择葡萄,我想订阅grapes集合,取消订阅所有其他集合,然后呈现新模板。如何选择新选项并采取相应措施?

<select>
    <option value="choose fruit">
    <option value="grapes">
    <option value="strawberries">
</select>

谢谢!

2 个答案:

答案 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都会取消订阅自动运行(如果有)之前的订阅,然后重新运行该功能。它也非常聪明,可以避免取消订阅和重新订阅任何不会发生变化的订阅。