Grails выбрать с RemoteFunction, может ли он обновить ag: textField? - PullRequest
0 голосов
/ 14 октября 2011

Мне нужно обновить значение textField, используя значение на сервере, основываясь на значении, которое пользователь выбирает в ag: select.В коде:

 <g:select name="description" from="${momentum.MoneyTransType.prodList}" value="${moneyInstance?.description}"
               noSelection="['':'-Select Description-']" onChange="${remoteFunction(action:'setHowMuch', update:[success:'howMuch', failure:'failure'],
               params:'\'selection=\' + this.value', options=[asynchronous:false])}"/>

 <g:textField id="howMuch" name="howMuch" value="${moneyInstance?.howMuch}"/>

Это не работает.Если я дам «update: [success:» div id, все хорошо, но это не то, что я хочу.Мне нужно разрешить пользователю вводить описание свободного потока (которое у меня будет в другом текстовом поле) и количество свободного потока.Я думаю, я мог бы скрыть div, а затем прослушать изменения этого div через jQuery, а затем обновить количество textField.Должен ли я иметь возможность обновлять textField с помощью функции «update» удаленной функции или с помощью другой функции grails?

Странно, но временный div 'toHide' с функцией изменения jQuery не работает для обновления textField, т. Е. Следующее предупреждение и т. Д. Не запускается:

        $('#toHide').change(function() {
            alert(" I got changed, value:");
            $("#howMuch").text($(this).val());
        });

1 Ответ

1 голос
/ 14 октября 2011

Ну, после написания всего нижеприведенного, я перечитал ваш вопрос и увидел, что вы заявили, что знаете, что это работает с div.Таким образом, остальная часть моего ответа может оказаться бесполезной, но что не так с использованием div?Пустой элемент div ничего не отобразит, поэтому вам не нужно его скрывать.Так что FWIW:

  1. Поместите свой <g:textField ...> в шаблон.
  2. Добавьте div, где вы хотите, чтобы шаблон отображался.Другими словами, замените текущий <g:textField ..> на <div id=updateme name=updateme></div>

  3. В вашем действии setHowMuch отрендерите шаблон.

Например,Я делаю:

В поле зрения:

<g:select class='setTagtypeValue-class'
            name='tagtype-${i}-header'
            from="${org.maflt.ibidem.Tagtype.list(sort:'tagtype').groupBy{it.tagtype}.keySet()}"
            value="${setTagtypeValue?.tagtype?.tagtype}"
            valueMessagePrefix="tagtype"
            noSelection="${['null':'Select One...']}"
            onchange="${remoteFunction(action:'options', update:'tagtype-options-${i}',  
                    params:'\'tagtype=\' + this.value +\'&i=${i}\'' )}" />

Действие контроллера:

def options = {
    def i = params.i ?: 0
    def tagtypes = Tagtype.findAllByTagtype(params.tagtype)

    render(template:"tagtypeList", model:[tagtypes:tagtypes,i:i])

}

tagypeList Шаблон:

<table>
  <tr>
    <th></th>
    <th><g:message code="tagtype.lookup" 
                    default="Lookup Table" /></th>
    <th><g:message code="tagtype.regexpression" 
                    default="Field Rule" /></th>
    <th><g:message code="tagtype.uicomponent" 
                    default="UI Component" /></th>
  </tr>
  <g:each in="${tagtypes}" var="tagtype" status="j">
  <tr>
    <td><g:radio name="setTagtypesList[${i}].tagtype.id" value="${tagtype.id}" 
            checked="${(setTagtypeValue?.tagtype?.id == tagtype.id ||
                            (!setTagtypeValue?.tagtype?.id && j==0))}"></g:radio></td>
    <td>${tagtype.lookupTable}</td>
    <td>${tagtype.regexpression}</td>
    <td><g:message code="${'uicomponent.' + tagtype.uicomponent.id}" 
                    default="${tagtype.uicomponent.uicomponent}" />
    </td>                               
  </tr>
  </g:each>
</table>

Этот код изЭкран метаданных (вызываемый набор полей в пользовательском интерфейсе) в http://www.maflt.org/products/Ibidem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...