学习 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