2016-05-25 3 views
0

Im работает на веб-сайте в метеор. Я только начал работать с контроллерами, но не могу понять, как получить нажатие кнопки, например.Метеор получить событие в железе: контроллер маршрутизатора

У меня есть следующий temnplate:

<template name="login"> 
    <form> 
     <input type="email" name="loginEmail"> 
     <input type="password" name="loginPassword"> 
     <input type="submit" class="login" value="Login"> 
    </form> 
</template> 

И мой контроллер:

LoginController = RouteController.extend({ 
    template: 'login', 

    'click .login': function(e, t) { 
     alert('submit button is clicked'); 
    } 
    }); 

Теперь, когда я нажимаю кнопку отправки перезагружается страницу и передает все данные в URL. это совсем не то, что я хочу. Я хочу, чтобы предупреждение появилось.

Я не знаю, с чего начать, и я думаю, что это имеет какое-то отношение к тому, что я не понимаю, как использовать контроллеры. Перед использованием контроллеров это сработало:

Template.login.events({ 
    'submit form': function(event){ 
     event.preventDefault(); 
     var emailVar = event.target.loginEmail.value; 
     var passwordVar = event.target.loginPassword.value; 
     Meteor.loginWithPassword(emailVar, passwordVar); 
     console.log('loggin in'); 
    } 
}); 

Итак, как я мог добиться того же самого в моем контроллере? Или я должен сделать для этого метод?

Примечания: Я использую железо: маршрутизатор для вызова контроллера:

Router.route('/login', { 
    name: 'login', 
    controller: 'LoginController' 
}); 

ответ

1

Вашей проблема связана с тем, что input типа «Submit» представят форму, которая вызовет перезагрузку страницы в качестве Цель по умолчанию для формы - это один и тот же URL. Таким образом, вы должны предотвратить поведение по умолчанию вашей кнопки, чтобы избежать отправки формы, как это:

'click .login': function(e, t) { 
    e.preventDefault(); 
    alert('submit button is clicked'); 
} 

Кроме того, вы не можете получить события шаблона в RouteController вам придется придерживаться Template.login.events как вы фактически делали в существо. Тем не менее, вы можете изменить событие с submit form к click .login, как это:

Template.login.events({ 
    'submit form': function(event){ 
    event.preventDefault(); 
    var emailVar = event.target.loginEmail.value; 
    var passwordVar = event.target.loginPassword.value; 
    Meteor.loginWithPassword(emailVar, passwordVar); 
    console.log('loggin in'); 
    } 
    //OR 
    'click .login': function (event) { 
    event.preventDefault(); 
    //your logic here 
    } 
}); 
+0

Неа, еще перегрузки. вы уверены, что это подходящее место для этого внутри контроллера? –

+0

нет права, не понимал, что вы не сможете получить шаблонные события, которые, как мне кажется, в контроллере маршрутов, вам все равно придется использовать функцию шаблонов событий 'Template.login.events'. И, вероятно, еще «event.preventDefault();« Я обновлю свой ответ – Guillaume

+0

Спасибо за обновление. Все еще есть проблема. если я хочу использовать Template.login.event Мне нужно импортировать как шаблон входа, так и пакет Template. Но я думаю, что я не хочу делать это внутри RouterController, так как я не хочу импортировать файл шаблона внутри контроллера. Так должен ли я сделать отдельный файл клиента для обработки событий и т. Д.? –

0

Я думаю, что у вас есть только добавить «preventDefault» до готовности, чтобы заставить его работать.

Таким образом, вы должны изменить код, как:

LoginController = RouteController.extend({ 
    template: 'login', 

    'click .login': function(e, t) { 
     e.preventDefault(); 
     alert('submit button is clicked'); 
    } 
    }); 
+0

Нет, все еще перезагружайте. вы уверены, что это подходящее место для этого внутри контроллера? –