开发者问题收集

学习 MeteorJS 尝试制作我自己的转换脚本...坚持事件处理

2015-09-09
60

在真正开始做更严肃的事情之前,我只是在 Meteor 上做一些随机的事情来掌握它。

无论如何,我很确定我将辅助函数与项目的实际 HTML 关联的方式可能存在问题。基本上,我正在尝试制作一个简单的摄氏到华氏/华氏到摄氏转换器,只要有人输入数字,# 就会转换。无需单击按钮。

这是 HTML 代码:

<head>
    <title>My Conversion Script</title>
</head>

<body>
    <h1>My Conversion Script</h1>

    {{ >converter}}
</body>

<template name="converter">
    <b>Enter Celsius:</b>
    <input type="text" name="celsius" {{userCalculation}}>

    <b>Enter Fahrenheit:</b>
    <input type="text" name="fahrenheit" {{userCalculation}}>
</template>

这是 JS 文件:

if (Meteor.isClient) {
    Template.converter.helpers({
        'userCalculation': function() {
             Session.get('celsiusCall');
             Session.get('fahrenheitCall');

             if (!NaN(celsius)) {
                  return celsius * 9/5 + 32;
             } else if (!NaN(fahrenheit)) {
                  return (fahrenheit  -  32)  *  5/9;
             }
         }

    });

    Template.converter.events({
        'keyup .celsius': function(e) {
            var celsius = e.target.value;
            Session.set('celsiusCall', celsius);
        },
        'keyup .fahrenheit': function(e) {
             var fahrenheit = e.target.value;
             Session.set('fahrenheitCall', fahrenheit);
        }
    });
}

我通过 console.log 检查了事件处理,事件运行正常。我在设置会话的方式或将辅助函数与 HTML 本身合并的方式上犯了一个错误。

另外,顺便提一下,我是否正确地假设一个会话只能处理 1 个变量?

编辑:我收到的错误是“模板辅助程序中的异常:ReferenceError:未定义摄氏度”

2个回答

这是一个变量作用域问题 - 您在模板事件中定义的变量无法在模板助手中访问,反之亦然。因此,您在事件处理程序中定义了 var farenheit = e.target.value ,但助手中的 farenheit 返回未定义。您需要在两者中定义变量。

如果我理解您的问题正确的话,Session 用作键值对的字典,因此您可以在其中定义多个变量。

Session.set('first', 'a');
Session.set('second', 'b);
Session.keys // {first: 'a', second: 'b'}
Jeremy S.
2015-09-09

您正确地创建并接收了会话密钥,但从未将它们分配给您正在使用的变量的名称。您需要为 Session.get 调用创建变量,如下所示:

var celsiusCall = Session.get('celsiusCall');
var fahrenheitCall = Session.get('fahrenheitCall');

然后,您就可以像现在这样使用这些变量。

chackerian
2015-09-09