Javascript 使Meteor对html元素具有反应性

Javascript 使Meteor对html元素具有反应性,javascript,meteor,Javascript,Meteor,因此,我有一个模式框,允许用户编辑/保存一些数据 我只想补充一点,与其他Meteor应用程序不同,我不想直接保存数据-我希望用户在点击save之前填写所有字段,然后保存到数据库并发送到服务器等。这主要是因为我希望用户能够点击cancel按钮恢复所有更改 我在表单的开头有一个下拉框,根据值的不同,将显示或隐藏字段 <select class="form-control" id="ddlNewInputType" placeholder=

因此,我有一个模式框,允许用户编辑/保存一些数据

我只想补充一点,与其他Meteor应用程序不同,我不想直接保存数据-我希望用户在点击save之前填写所有字段,然后保存到数据库并发送到服务器等。这主要是因为我希望用户能够点击cancel按钮恢复所有更改

我在表单的开头有一个下拉框,根据值的不同,将显示或隐藏字段

                            <select class="form-control" id="ddlNewInputType" placeholder="Enter your input type">
                            <option value="input">Input</option>
                            <option value="formula">Formula</option>
                        </select>
然而,这不起作用。除了当它首次加载到页面上时,它永远不会击中公式,可能是因为流星没有考虑任何HTML元素作为反应,所以它永远不会重新评估时,HTML元素的变化。
解决这个问题的合适方法是什么?有没有可能在Meteor中明确地做出反应?我还考虑将下拉列表值放入会话变量中,但这看起来很混乱,因为我需要管理此会话变量,请记住在模式框关闭时将其清除。

您的分析是正确的-需要加入一个被动变量,以便您的助手在更改会话后重新评估选择元素。基本策略如下所示:

创建模板时初始化反应变量。 每当选择更改时,更新反应变量。 阅读助手中的被动变量。 与其使用会话变量,不如使用模板的作用域。下面是一组修改示例:

Template.myTemplate.helpers{ isFormula:函数{ 返回Template.instance.isFormula.get; } }; Template.myTemplate.events{ “更改ddlNewInputType”:函数e,模板{ var isFormula=$e.currentTarget.val=='formula'; template.isFormula.setisFormula; } }; Template.myTemplate.created=函数{ //在代码中,将其默认为中的当前值 //你的数据库不是假的 this.isFormula=new ReactiveVarfalse; }; 请记住,您还需要执行以下操作:

$meteor添加反应式var 有关此技术的完整说明,请参阅我在上的帖子

                {{#if isFormula }}

                    <div class="row">
                        <input type="text"
                               id="txtNewInputFormula" placeholder="Enter formula">

                    </div>
                {{/if}}
isFormula: ->
    $('#ddlNewInputType').val() == 'formula'