0

我已经开始使用铁路由器了。我有一个多页的“向导”表格。在每个页面的末尾都有一个“下一步”按钮,其中的 href 填充了 {{pathFor 'nextPage'}} href。这很好......但是,当我点击后退按钮时,我的用户输入的字段值消失了。

我正在考虑使用 jquery 的 data() 调用或使用 Meteor 的会话来保留输入的值,但我必须相信有更好的(内置?)方法来做到这一点。我只是没有看到任何提示/文档。我在大气中搜索了一个包,但没有找到与它完全匹配的东西(很多表单助手,比如 autoform,但没有特别与 Iron-router 相吻合的东西)。

任何建议都非常感谢。

4

3 回答 3

3

如果您尝试跨多个页面保存数据,我会创建一个集合来存储向导的所有相关数据。因此,当用户通过向导进行操作时,您正在填充该集合文档的不同部分。或者,正如其他人所提到的,您可以将数据存储在 Session. 如果用户刷新页面,该数据将丢失,但可以通过您的路线更改访问。

值得注意的是,在 Iron-router 的 dev 分支中,命名 yield 的工作方式略有不同。在发布版本中,布局的命名产量在每条新路线上都会被替换。换句话说,即使渲染的模板是一样的,它仍然是完全从页面上撕下来重新渲染的。在 dev 分支中,仅当模板实际更改时才重新渲染命名的屈服区域。

因此,在您的情况下(在 dev 分支中),您可能会执行以下操作(只是为了说明概念):

Router.map(function () {
  this.route('stepOne', {
    template: 'wizard', 
    path: '/stepOne',
    action: function () {
      Session.set('wizardStep', 'stepOne');
      this.render('wizard'); // same as this.render()
    }
  });

  this.route('stepTwo', {
    template: 'wizard',
    path: '/stepTwo',
    action: function () {
      Session.set('wizardStep', 'stepTwo');
      this.render();
    }
  });
});

<template name="wizard">
  {{#ifStepEquals "stepOne"}}
    <!-- do something with step one -->
  {{/ifStepEquals}}

  {{#ifStepEquals "stepTwo"}}
    <!-- do something here with step two -->
  {{/ifStepEquals}}
</template>
于 2013-09-25T06:29:37.403 回答
0

编辑成答案,就像在 Jeopardy 上一样:

将您的一系列表单制作为您隐藏或显示的一系列 div,它们一直存在到最后,没有任何东西可以移动或保存。

答案 2:让您的向导在插入时进行编辑,就像在更新时进行编辑一样。创建一个初始文档,带有一个指示未完成的标志,像在编辑期间一样从 DOM 更新其值,然后在清除所有向导屏幕后更新该标志。模板变得更加可重用。

于 2013-09-11T05:56:38.923 回答
0

我看到的经验法则是:如果您想在页面加载之间保留值(这是后退按钮的作用,重新加载前一页),请将它们放在 URL 中。

我不认为 Meteor 支持您在某些 Web 脚本语言中获得的那种服务器端会话,这似乎是您的想法。

于 2013-09-11T14:15:06.247 回答