2015-08-10 2 views
0

У меня есть приложение для метеорита с <button>. На этой кнопке есть событие onclick, вызывающее функцию verifypwd(). Моя функция объявляется в файле с именем verifypwd.js, который находится в основном каталоге приложения. Когда я нажимаю кнопку, она говорит мне, что не может найти эту функцию. Что не так?Почему мое приложение Meteor не может распознать мою функцию?

Вот мой код:

HTML

<head> 
    <title>KinnockPass</title> 
    <script src="verifypwd.js"></script> 
</head> 

<body> 
</body> 

<template name="PPRO"> 
    <div class="vertibox"> 
    <div id="authorization-box"> 
     <div id="authorization"> 
     <h1>Are you a Riley?</h1> 
     <input id="password" type="password"/> 
     <button id="password-submit" onclick="verifypwd();">Yes, I Am.</button> 
     </div> 
    </div> 
    </div> 
</template> 

<template name="passed"> 
</template> 

Главная JS файла

//Define Route of PPRO Template 
Router.route('/', {template: 'PPRO'}); 
Router.route('/passed'); 

pwd = new Mongo.Collection("pwd"); 

verifypwd.js

var verifypwd = function(){ 
    console.log("Hello"); 
} 

ответ

1

Meteor обертывает все функции, чтобы их объем был ограничен файлом, в котором они находятся, если только они не определены как глобальные функции. Если вы удалите var от var verifypwd, он должен работать. Более метеорный способ сделать то, что вы пытаетесь сделать, - определить template event для вашего шаблона PPRO и поместить свой код verifypwd в тот же файл, тогда он может быть локальной функцией.

+1

Все это правильно. Я бы добавил, что буквальный ответ на его вопрос заключается в том, что файл не загружается, потому что он не подается из '/ public'. –

+0

Правда, можно также определить функции определения. Конечно, это приведет к вопросу о том, почему вы проверяете пароль на клиенте, который я должен был задать раньше. –