在使用Meteor时,为什么我不能在我的html中访问在单独的JS文件中创建的JS函数

时间:2016-05-15 23:18:17

标签: meteor

Meteor说当你在JS文件中写一些javascript时,每个文件都会在应用程序的各个地方自动访问它,但是当我在一个单独的文件中写一个函数时,我只是得到一个控制台错误,说该函数可以当我用html调用它时找不到它。我可以让它工作的唯一方法是在html文件中编写JS,但我想保持语言分离。知道问题是什么吗?

代码:

html在一个文件中:

<button onclick="dylan()"></button>

另一个档案中的js:

function dylan(){
   console.log("hello");
}

问题是,当我点击按钮时,它表示dylan不是一个功能。

3 个答案:

答案 0 :(得分:2)

Meteor docs没有说明这一点,但每个单独的javascript文件都包含在一个闭包中:

(function() { //the file content // })()

因此给定文件中的所有函数都有自己的范围。

Meteor中js文件中定义的函数通常只有文件范围 - 也就是说,该文件中的任何对象都可以引用它们。

如果要定义全局函数,请创建一个全局变量:

dylan = function(){
  ...
}

请注意,缺少letvar会将函数限制为文件范围。

现在,您可以在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>即可使用!