2016-05-25 103 views
0

我在流星的網站上工作。我剛開始使用控制器,但不知道如何獲得按鈕點擊的例子。流星得到鐵的事件:路由器控制器

我有以下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將提交表單,這將觸發頁面重載的表單的默認目標是相同的網址。 所以,你必須避免你的按鈕的默認行爲,以避免提交表單,像這樣:

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

而且,你不能在一個RouteController模板的事件,你將不得不堅持Template.login.events,你實際上在做的存在。但是,您可以將事件改變從submit formclick .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,我需要導入登錄模板和Tem​​plate包。但我想我不想在RouterController內部執行此操作,因爲我不想在控制器內導入模板文件。那麼我應該爲處理事件製作一個單獨的客戶端文件嗎? –

0

我認爲,你只有在觸發警報前添加一個「的preventDefault」,使其工作。

所以,你應該修改代碼如下所示:

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

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

不用,仍然可以重新加載。你確定這是在控制器內部完成這個操作的正確位置嗎? –