Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript meteor:键入一些输入值后重新计算帮助器值_Javascript_Meteor - Fatal编程技术网

Javascript meteor:键入一些输入值后重新计算帮助器值

Javascript meteor:键入一些输入值后重新计算帮助器值,javascript,meteor,Javascript,Meteor,我的模板如下所示: <input type="text" name="inputValue" id="inputVal"> {{#each group}} <section> <h2>{{title}}</h2> {{#each element}} <p>{{description}} {{numberValue}} {{unit}}</p>

我的模板如下所示:

<input type="text" name="inputValue" id="inputVal">

{{#each group}}
    <section>
        <h2>{{title}}</h2>
        {{#each element}}
            <p>{{description}} {{numberValue}} {{unit}}</p>
        {{/each}}
    </section>
{{/each}}
因此,我需要一名助手:

Template.usedTemplate.helpers({
    'calculatedValue': function() {
        return document.getElementById("#inputVal").value * this.numberValue;
    }
});
我希望这是创建helper的正确编码,因为值在each循环中使用

但我的问题是,用户在加载站点后键入inputValue。那么,在用户在输入字段中键入一些值之后,我必须做什么来重新计算行呢


(如果在开始时有一种输出信息文本也很好,因为默认情况下没有给定值。键入一些值后,结果会显示出来。)

我没有测试此代码,但请尝试以下操作:

var userInput = new Tracker.Dependency;

Template.usedTemplate.events({
  'keypress #inputVal': function (event) {
    userInput.changed();
  }
});

Template.usedTemplate.helpers({
  'calculatedValue': function() {
    userInput.depend();
    return Template.instance().$("#inputVal").val() * this.numberValue;
  }
});
旁注:
document.getElementById()
已经需要一个ID作为参数,因此不需要
前缀


通常,
calculatedValue
帮助程序不会自动更新,因为它不包含反应式方法调用,例如
someCollection.find()
Session.get('xyz')
。但是使用
Tracker.Dependency
,您可以使任何事情都成为被动的。

我认为您可以简单地使用Session或ReactiveVar来解决您的问题

Session.setDefault("input-value", "")

Template.usedTemplate.events({
  'keypress #inputVal': function (event) {
    Session.set("input-value", Template.instance().$("#inputVal").val());
  }
});

Template.usedTemplate.helpers({
  'calculatedValue': function() {
    return Session.get("input-value") * this.numberValue;
  }
});
或者使用ReactiveVar

Template.usedTemplate.onCreated(function(){
  this.inputValue = new ReactiveVar("")
})

Template.usedTemplate.events({
  'keypress #inputVal': function (event) {
    Template.instance().set(Template.instance().$("#inputVal").val());
  }
});

Template.usedTemplate.helpers({
  'calculatedValue': function() {
    return Template.instance().get() * this.numberValue;
  }
});
我建议使用ReactiveVar,因为会话是全局val

在使用之前,您应该将ReactiveVar添加到应用程序中

meteor add reactive-var

我得到错误
uncaughtreferenceerror:Tracker没有定义
yes它只在客户端。。。
Tracker
是自己的软件包吗?奇怪。这根本不应该发生。你能将你的代码转储到Meteorpad并在复制后再次在这里发表评论吗?我必须从更大的角度来理解到底发生了什么。
meteor add reactive-var