学习 MeteorJS 试图制作我自己的转换脚本...卡在事件处理上

Posted

技术标签:

【中文标题】学习 MeteorJS 试图制作我自己的转换脚本...卡在事件处理上【英文标题】:Learning MeteorJS trying to make my own conversion script...stuck with the event handling 【发布时间】:2015-12-05 23:11:29 【问题描述】:

我只是在 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: celsius is not defined”

【问题讨论】:

【参考方案1】:

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

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

Session.set('first', 'a');
Session.set('second', 'b);
Session.keys // first: 'a', second: 'b'

【讨论】:

【参考方案2】:

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

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

然后你可以像现在这样使用这些变量。

【讨论】:

以上是关于学习 MeteorJS 试图制作我自己的转换脚本...卡在事件处理上的主要内容,如果未能解决你的问题,请参考以下文章

使用 AngularJS 和 MeteorJS

想学编程有空自己做脚本,学那个软件的好呢?易语言?按键精灵?还有其他吗?那个比较好呢?

Meteor JS:使用外部脚本

MeteorJS - 如何防止匿名客户端订阅集合?

试图学习如何用 python 制作一个不和谐的机器人。每次我尝试启动代码时都会出现相同的错误

MeteorJS:模板助手更新后的回调