Meteor说当你在JS文件中写一些javascript时,每个文件都会在应用程序的各个地方自动访问它,但是当我在一个单独的文件中写一个函数时,我只是得到一个控制台错误,说该函数可以当我用html调用它时找不到它。我可以让它工作的唯一方法是在html文件中编写JS,但我想保持语言分离。知道问题是什么吗?
代码:
html在一个文件中:
<button onclick="dylan()"></button>
另一个档案中的js:
function dylan(){
console.log("hello");
}
问题是,当我点击按钮时,它表示dylan不是一个功能。
答案 0 :(得分:2)
Meteor docs没有说明这一点,但每个单独的javascript文件都包含在一个闭包中:
(function() { //the file content // })()
因此给定文件中的所有函数都有自己的范围。
Meteor中js文件中定义的函数通常只有文件范围 - 也就是说,该文件中的任何对象都可以引用它们。
如果要定义全局函数,请创建一个全局变量:
dylan = function(){
...
}
请注意,缺少let
或var
会将函数限制为文件范围。
现在,您可以在onclick
处理程序中使用此全局。
但是请注意,通常在Meteor中,您将在模板级别定义一个事件处理程序,例如:
Template.myTemplate.events({
'click button'(){
...your code here
}
});
与直接在html中引用事件处理程序相反。
答案 1 :(得分:0)
如果您没有利用诸如此类的精彩功能,则无法满足使用Meteor的目的 的 Template.X.events({}); 强>,
Template.X.helpers({}); 以及
Template.registerHelpers({});
您可以通过以下方式编写所需的代码:
Template.template_name.events({
'click .button_class' : function() {
console.log("Hello");
}
});
//HTML
<button class="button_class"></button>
如果必须在多个HTML中使用click事件,那么您可以使用registerHelper方法而不是模板点击事件。
Template.registerHelpers('dylan' : function() {
console.log("Hello");
});
//html
<button onclick="dylan"></button>
答案 2 :(得分:-1)
要访问dylan()
,您必须先将包含该功能的脚本文件加载到html文档中。
您可以在按钮前的任意位置添加<script src="myfile.js"></script>
来执行此操作。 (将myfile替换为脚本名称)
加载后,<button onClick="dylan()"></button>
即可使用!