【问题标题】:How to make a session variable reactive?如何使会话变量反应?
【发布时间】:2013-02-27 01:38:20
【问题描述】:

我正在运行 Meteor 0.5.7,并尝试在用户单击提交时显示引导警报消息。

client.js

Handlebars.registerHelper('isSuccessful',function(input){
  return Session.get("success");
});    

Template.form.events({
  'click .submit' : function (event, template) {
     if (condition) {
        Session.set("success", true);
        // hide warning, show success
        $('#valid_form').show();
        $('#invalid_form').hide();
     } else {
        Session.set("success", false);
        // hide success, show warning
        $('#valid_form').hide();
        $('#invalid_form').show();
     }
  } 
});

Template.form.rendered = function () { $('.alert').hide();};

page.html

<body>
   {{> page}}
</body>

<template name='page'>
  {{> form}}
</template>

<template name='form'>
   <!-- Show Alerts Above Form -->
   <div class="alert alert-success" id="valid_form">..</div>
   <div class="alert" id="invalid_form">..</div>

   {{#if isSuccessful}}
     <div>SHOW CONFIRMATION PAGE</div>
   {{else}}
    <div>SHOW INPUT FIELDS</div>
   {{/if}}
   <div>   
</template>

当用户最初点击提交并且不满足条件时,他们必须再次点击提交才能获得警告消息。所有其他时间逻辑都有效。

我已经查看了这个 - How does Meteor's reactivity work behind the scenes?,并重新阅读了有关响应式编程部分的 Meteor 文档,但仍有一些问题。

客户端中的else语句不应该默认为success == false的会话变量,并且车把模板立即在{{else}}块中拾取它吗?有点糊涂。谢谢,

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我的问题的答案似乎是在车把注册助手中将 return Session.get("success") 更改为 return Session.equals("success",true) 可以解决问题。从我正在阅读的内容来看,它的“失效”较少? - 不知道那是什么意思atm,但这是一个开始!

    【讨论】:

      【解决方案2】:

      如果您的目的是隐藏/显示某个条件的相关警报,您可以改为这样做:

      client.js

      Template.form.rendered = function() {
        // hide all alerts when elements are rendered
        $('.alert').alert('hide');
      }
      
      Template.form.events({
        'click .submit' : function (event, template) {
          if (condition) {
            // hide warning, show success
            $('#valid_form').alert();
            $('#invalid_form').alert('hide');
          } else {
            // hide success, show warning
            $('#valid_form').alert('hide');
            $('#invalid_form').alert();
          } 
        } 
      });
      

      page.html

      <body>
        {{> page}}
      </body>
      
      <template name='page'>
        {{> form}}
      </template>
      
      <template name='form'>
        <div class="alert alert-success" id="valid_form">..</div>
        <div class="alert" id="invalid_form">..</div>
      </template>
      

      【讨论】:

      • 当我只希望它在需要时显示时,您的建议将始终显示其中一个警报。为了澄清,警报应该只在表单字段有效或无效时弹出,并且示例中没有显示表单字段只是为了保持简短。希望这是有道理的?
      • $('.alert').alert('hide') 在模板渲染时隐藏所有警报
      • Prashant,感谢您的勤奋,我更新了模板以反映我在本地使用的内容。如您所见,我希望警报显示在可能具有或不具有警报状态的其他 html 元素之外。
      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2013-01-21
      相关资源
      最近更新 更多