【问题标题】:Do I need to Reload the Site in Meteor?我需要在 Meteor 中重新加载站点吗?
【发布时间】:2013-05-05 21:04:04
【问题描述】:

我有这个模板:

<template name="body">
  {{#if key}}
    {{> mite}}
  {{else}}
    {{> settings}}
  {{/if}}
</template>

和

<template name="settings">
  <h1>The settings</h1>
  <form class="form-inline">
    <input id='apiKey' type='text' name='apiKey' placeholder='your API-Key'>
    <button id='saveSettings' type='submit' class='btn'>save</button>
  </form>
</template>

<template name="mite">
  <div>
    <h3>...here with key</h3>
    <p>
      <a id="optout" href="#">not your key?</a>
    </p>
  </div>
</template>

当我显示设置表单时,用户可以在其中设置显示“螨”模板所需的键。现在,当我“提交”表单时,页面会重新加载并显示“螨”模板。

在 mite 模板上,我想要那个链接“不是你的钥匙?”或删除密钥然后再次显示设置表单的东西。它适用于重新加载......但如果没有 Meteor 中的所有重新加载,我不能这样做吗?如何在正文模板中使用 #if 来“调用”模板部分?

-- 雷纳托

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您需要将一个事件处理程序绑定到您的表单并使用preventDefault() 来阻止它提交。例如

    客户端 js

    Template.settings.events({
        'submit':function(event,template) {
            event.preventDefault();
            var apiKey = template.find('input[name=apiKey]').value;
    
            //..rest of logic to handle submit event
            Session.set("key",true);
        }
    });
    

    然后您可以使用带有Session.get("showthistemplate") 的模板助手来决定是否显示另一个模板:(这是一个通用助手,因为您将其放入而不是模板:

    Handlebars.registerHelper('key',function() {
        return Session.set("key",true);
    });
    

    【讨论】:

    • 但是网站仍然需要重新加载,对吧?我想要做的是,一旦设置了密钥,模板'mite'就会呈现......
    • 不,模板系统对流星是“反应性的”。因此,一旦设置或更改了Session.set('key',true),Meteor 就会自动使用更新修补 DOM,而无需重新加载。它真的很酷!
    • 啊!会议……就是这样。 Template.body.key = -&gt; Session.get 'key' 有效,但 Template.body.key = -&gt; localStorage['key'] 无效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 2021-05-14
    • 2019-12-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多