2011-11-15 80 views
0

如何使用remoteLink或remoteFunction來調用一個動作,然後使用該動作在JavaScript函數內部產生/返回的內容?只要我把參數的JavaScript函數中對動作的完成調用,功能完全不再被調用,例如:grails ajax功能 - 一個「惱人的bug」

onComplete: 'processUpdate(e);' --or-- 

    after: 'processAfter(e)' 

然後,將JavaScript函數不再被調用。供參考:整個代碼行是:

<g:select name="week" from="${strategyInstance.constraints.week.inList}" value="${strategyInstance?.week}" valueMessagePrefix="strategy.week" noSelection="['': '']" 
    onchange="${remoteFunction(action: 'produceUpdate', params: '\'update=\' + this.value', onComplete:'processUpdate(e);', before: 'alert("doing before")', after: 'processAfter(e)')}"/> 

如果我刪除了參數「E」出來的JavaScript函數的名稱,即:

onComplete: 'processUpdate();' 

然後調用該函數。如果我聲明函數:

function processUpdate(e) { 
    alert('processUpdate: ' +e) 
    } 

它調用的功能,但提醒我:

 processUpdate: undefined 

那麼,如何一個Grails中獲得通過的行動產生的結果爲JavaScript函數,可以再工作上/有?

+0

注意這不會在任何Grails的1.3.7或2.0 Grails的工作。 – Ray

回答

1

xml解析機制中存在一個非常惱人的錯誤:只要您在包含雙引號的grails-tag中定義一個屬性,並且標記本身使用雙引號,則會忽略完整的屬性定義。您的警報使用雙引號。嘗試:

<g:select name="week" from="${strategyInstance.constraints.week.inList}" 
    value="${strategyInstance?.week}" 
    valueMessagePrefix="strategy.week" 
    noSelection="['': '']" 
    onchange="${remoteFunction(
     action: 'produceUpdate', 
     params: '\'update=\' + this.value', 
     onComplete:'processUpdate(e);', 
     before: 'alert(\'doing before\')', 
     after: 'processAfter(e)')}"/> 

onComplete被調用獨立於AJAX調用是否正常(所以成功和失敗)。如果你想與參數data訪問成功的情況下使用onSuccess結果:

<g:select name="week" from="${strategyInstance.constraints.week.inList}" 
    value="${strategyInstance?.week}" 
    valueMessagePrefix="strategy.week" 
    noSelection="['': '']" 
    onchange="${remoteFunction(
     action: 'produceUpdate', 
     params: '\'update=\' + this.value', 
     onSuccess: 'processUpdate(data);', 
     before: 'alert(\'doing before\')', 
     after: 'processAfter(e)')}"/> 
+0

謝謝。 「一個非常惱人的錯誤」的確如此!我已經嘗試了Grails 1.3.7和Grails 2.0中的各種組合,可能在所有這些組合中都有雙引號,因爲我永遠無法使用它。你認爲Grails人們是否知道這一點? – Ray

+0

如果可能的話,只需要一個快速的跟蹤問題,將地圖作爲結果發送回Javascript函數。有沒有一種很好的/簡單的方法來解析你知道的Javascript函數中的grails映射? – Ray

+0

在遠程操作中,使用以下命令將結果映射轉換爲JSON:'render(resultMap as JSON)'。數據立即是一個javascript對象。你可以在JS端使用'console.log(data)'調試它,並與螢火蟲一起使用。關於這個錯誤:http://jira.grails.org/browse/GRAILS-1973?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel。不幸的是,它不被認爲是「固定值」,這是非常可悲的。 – Chris