2012-06-08 146 views
1

我對Grails很新,所以請耐心等待。Grails從視圖訪問控制器值

我的觀點有JavaScript代碼喜歡這樣的:

//js code in my View 
function validateEmailAndSetEmail(){ 
    var result =${remoteFunction(controller:'myController',action:'validateEmail',update:'responseDiv', params:'\'email=\'+document.getElementById(\'email\').value')}; 

    if (result) { //doSomething} 
} 

和我的控制器看起來像:

def validateEmail = { 
    def emailToValidate = request.getParameter("email") 
    def matchingEmailFound = myService.checkEmailAddress(emailToValidate) 

    if (matchingEmailFound){ 
     render "This email is already in use.<br>If you have already created an account with this email, please try to reset the password from Login page."} 
    else{ 
     //setEmail to send here 
     render "This email is not in use. This email will be used as your account email"} 

    return !matchingEmailFound 

我的問題有兩個部分:

  1. 當我檢查值結果在我的螢火蟲js代碼中,它是 不是布爾類型(true/false),並且該值似乎不正確,是否有任何方法可以正確地將此值 傳遞給控制器​​視圖中的js?

  2. 我可以在 控制器中調用設置的電子郵件值給某個變量,並在我的視圖中調用js外部的變量嗎?

在此先感謝。

回答

1

請記住,Ajax是異步的 - 您的if(result)在遠程調用發送後立即執行,而不是在完成時執行。

一個更好的辦法是改變你的控制器動作返回一些JSON數據:

def model = [matchFound:matchingEmailFound] 
if(matchingEmailFound) { 
    model.message = "This email is already in use.<br>If you have already created an account with this email, please try to reset the password from Login page." 
} else { 
    model.message = "This email is not in use. This email will be used as your account email" 
} 
render (model as JSON) 

然後在客戶端使用,而不是更新的onSuccess功能。

${remoteFunction(controller:'myController',action:'validateEmail', 
    params:'\'email=\'+document.getElementById(\'email\').value', onSuccess:'checkEmail(e)')}; 

,並定義

function checkEmail(response) { 
    var r = JSON.parse(response.text); 
    $('responseDiv').innerHTML = r.message; 
    if(r.matchFound) { 
    // do stuff 
    } 
} 

我不是一個JavaScript專家,但你的想法。

+0

謝謝,它工作得很好。除了我更改了 $('responseDiv')。innerHTML = r.message; to var r = eval('('+ response.responseText +')'); – grailsDev

+0

var r = JSON.parse(response.text); var r = eval('('+ response.responseText +')'); – grailsDev

+0

和$('responseDiv')。innerHTML = r.message;到$('responseDiv')。update(r.message); – grailsDev

相關問題