2016-03-21 4 views
0

Ich versuche, AutoFill in einer Form festlegen, dass, wenn das ID-Feld im Formular ändert, mehrere andere Felder automatisch ausgefüllt werden. Ich verwende jQuery für das Ereignis on change.Grails erhalten Feldwert durch ID in Groovy-Klausel

Dies ist das ID-Feld:

<g:field id="id" name="id" value="${this.myContoller?.id}"/> 

Und das ist meine jQuery-Funktion:

$(document).ready(function(){ 
     $("#id").change(function(){ 
      $("#otherField").change("${info.getOtherField('#id')}") 
     }); 
    }); 

Info ist ein taglib, dass ich die Informationen, die ich für dieses Feld muß ziehen verwenden. Ich kann nicht herausfinden, wie man die Daten aus dem Feld in den groovigen Code innerhalb der jquery-Anweisung zieht. Ich benutze Grails 3.

+2

Sie können nicht. Sie können mit der serverseitigen Verarbeitung, die bereits ausgeführt wurde, nicht auf clientseitige Daten zugreifen. In deinem Fall wird #id also niemals bewerten. –

+0

Was wäre ein besserer Weg, dies zu erreichen? –

+0

Machen Sie einen AJAX-Aufruf an einen Controller, um die Daten abzurufen. Sie könnten sogar die Tag-Bibliothek von Ihrem Controller aus verwenden, wenn Sie müssen. –

Antwort

1

Wie Joshua Moore sagte, Sie können nicht auf die Server-Seite ohne als Ajax Call Callout. Hier ist eine Möglichkeit, dies zu tun:

$(document).ready(function(){ 
    $("#id").change(function(){ 
    $.ajax({ 
     url: "${createLink(controller: 'myController', action: 'getTheOtherFieldValue')}", 
     data: { 
      'id' : $(this).val() 
     }, 
     success: function(data, textStatus) { 
      $("#otherField").change(data.theOtherFieldValue)  
     } 
    }); 


    }); 
}); 

Und Ihre Controller aussehen kann,

MyController { 
... 
    def getTheOtherFieldValue(String id) { 
    render(contentType: 'text/json') { 
     theOtherFieldValue = getOtherField(id) 
    } 
    } 
... 
} 

Grundsätzlich Ihre Trigger macht einen Ajax-Aufruf an den Server mit den #id Werte, wartet, bis er zurückgeht und aktualisiert dann #otherField mit den zurückgegebenen Werten

+0

Das funktioniert fast. Ich bekomme einen Fehler in der Steuerung mit den Worten: 'Nein solche Eigenschaft: theOtherFieldValue für Klasse: groovy.json.StreamingJsonBuilder $ StreamingJsonDelegate.' –

+0

Ich habe das Problem gefunden. Im Controller sollte der gerenderte Wert wie folgt aussehen: 'val {val {theOtherFieldValue: getOtherField (id)}}' und in der jQuery sollte der Code, der den Wert setzt, '$ (" # otherField ") sein. Val (data.val.val.theOtherFieldValue) ' –

Verwandte Themen