2016-03-21 18 views
0

Otomatik form doldurma, form alanında değişiklik olduğunda, form doldurmaya çalışıyorum, diğer birçok alan otomatik olarak doldurulur. Değişiklik olayı için jQuery kullanıyorum. Grails groovy cümlede kimliği ile alan değeri olsun

Bu

id alandır:

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

Ve bu benim jQuery işlevidir:

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

Bilgi ben bu alan için ihtiyacınız olan bilgileri çekmek için kullanıyorum bir Taglib olduğunu. Alandaki verileri jQuery ifadesinin içindeki groovy koduna nasıl çekeceğimi anlayamıyorum. Ben Grails kullanıyorum 3.

+2

Yapamazsınız. İstemci tarafı verilerine, önceden yapılmış olan sunucu tarafı işlemiyle erişemezsiniz. Yani senin durumunda #id asla değerlendirmeyecek. –

+0

Peki, bunu başarmanın daha iyi bir yolu ne olurdu? –

+0

Verileri almak için bir denetleyiciye bir AJAX çağrısı yapın, yapmanız gerekiyorsa etiket kitaplığını denetleyicinizin içinden de kullanabilirsiniz. –

cevap

1

Joshua Moore gibi ajax çağrısı olmadan sunucu tarafına ek bilgi veremeyeceğinizi söyledi. İşte o yapmanın bir yolu:

$(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)  
     } 
    }); 


    }); 
}); 

Ve benzeyebilir Denetleyiciniz,

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

Temelde, tetik #id değerleri ile sunucuya bir ajax arama yapar, döndürür kadar bekler ve daha sonra #otherField değerini döndürülen değer (ler) ile güncelleştirir.

+0

Bu neredeyse işe yarıyor. Denetleyicide bir hata alıyorum: 'Böyle bir özellik yok: sınıf için theOtherFieldValue: groovy.json.StreamingJsonBuilder $ StreamingJsonDelegate.' –

+0

Sorunu buldum. Denetleyicide, işlenen değer aşağıdaki gibi ayarlanmalıdır: valF (valm "theOtherFieldValue: getOtherField (id)}}" ve jQuery'de, değeri ayarlayan kod "$ (" # otherField ") olmalıdır. data.val.val.theOtherFieldValue) ' –

İlgili konular