2012-04-14 10 views
0

Ich versuche Grails ui Autocomplete-Komponente zu verwenden. Es scheint ziemlich einfach zu sein, aber ich bleibe stecken und versuche Parameter an den Ajax-Aufruf zu übergeben. Was ich brauche ist, dass jedes Mal, wenn ich das select-Element (tempType) ändere, der Ajax-Aufruf an die Aktion (searchTemplateByNameAndType) auch den Wert des select-Feldes sendet. In meinem Controller habe ich eine Methode, wie:Grils ui Autocomplete: Wie andere Felder übergeben?

Template.findAllByNameAndType(params.query, params.tempType). 

Ich habe das Attribut „DependsOn“ bereits versucht, mit, dass die grails ui zur automatischen Vervollständigung bietet. Aber ich habe auch herausgefunden, dass die dependsOn einen bekannten Bug hat und den Wert nicht an den Controller sendet. Also versuche ich nun für einige Stunden diesen Parameter mit dem Attribut "queryAppend" zu übergeben, ohne Erfolg. Hier ist, wie ich tue:

<span class="L80"> 
    <g:select class="L80" id="tempType" name="tempType" 
    from="${Type?.values()}" keys="${Type.values()*.name()}" 
    onchange='updateTypeValue(this.value);' value=""/> 
</span> 

<span id="templates" class="L520"> 

<gui:autoComplete 
     id="templateName1" 
    class="campo L490" 
    resultName="result" 
    controller="template" 
    action="searchTemplateByNameAndType" 
    queryAppend="tempType=????"/> 

</span> 

Kennt jemand eine Möglichkeit, den Auswahlfeldwert als Parameter in queryAppend passieren ?? Daran bin ich jetzt wirklich fest.

Danke!

Antwort

0

vergessen, dass vor zu beantworten. Aber natürlich kann ich das nicht und hier ist warum:

1 - Das Grails-Tag "gui: autoComplete" wird in der Server-Seite verarbeitet, bevor Sie zum Browser gehen.

2 - document.getElementById ('was auch immer') wird clientseitig im Webbrowser verarbeitet, nachdem die gui: autocomplete bereits ausgeführt wurde. So hat Grails schon die Antwort auf den Webbrowser gedient.

3 - Wenn ich versuche, einen Javascript-Wert wie document.getElementById ('was auch immer'). Value auf der Serverseite zu verketten, ist es noch nicht fertig. Es wird sein, sobald der Controller zurückkehrt.

Bemerkenswert, dass queryAppend wirklich keine Verkettung über den Plus-Operator akzeptiert, da, sobald Sie die Anführungszeichen schließen, das ist es, Sie bereits den Wert eingegeben haben, der übergeben wird. Sie können jedoch einen Wert verketten, indem Sie die $ {} -Notation verwenden, die grailartiger ist.

0

Können Sie sich

document.getElementById(\'tempType\').value 

wie folgt verwenden:

<gui:autoComplete 
    id="templateName1" 
    class="campo L490" 
    resultName="result" 
    controller="template" 
    action="searchTemplateByNameAndType" 
    queryAppend="tempType=" + document.getElementById(\'tempType\').value/> 
+0

Hmm. Ich habe das ausprobiert und es gibt eine Ausnahme: Fehler 500 (Interner Serverfehler. Nachricht: Erwartet '=' nach dem Attributnamen). Und es ist verständlich warum. Wenn Sie die Anführungszeichen auf "tempType =" schließen, ist das das Ende des Tag-Attributs, oder? Also der Rest, ich meine die + document.get ... ist Syntaxfehler. Immer noch fest. –

Verwandte Themen