вызов remoteFunction не работает Grails

Я пытаюсь вызвать функцию после выбора в раскрывающемся меню. Вот мой код для раскрывающегося меню в моем list.gsp для класса домена «Код»:

<td><g:select name="data" from="${codeInstance.datas.language}" 
          onchange="${remoteFunction(action: 'translationById')}"/> 
</td>

И вот функция, которую я пытаюсь вызвать. Это в моем CodeController:

def translationById = {
        println "Fine"
        //println params;
    }

Я просто пытаюсь распечатать «Хорошо», поэтому я знаю, что функция была вызвана, но «Хорошо» никогда не печатается. Почему функция не вызывается?


person Ameya    schedule 06.08.2012    source источник


Ответы (2)


Вместо использования замыкания используйте метод, например:

def translationById() {
        println "Fine"
        //println params;
}

Кроме того, используйте отладчик браузера, такой как firebug или аналогичный, чтобы увидеть, отображается ли сообщение об ошибке.

Что произойдет, если вы поместите предупреждение в событие onchange вместо remoteFunction? Если отображается предупреждение, то я думаю, что ваша проблема связана с библиотекой прототипов. Добавьте библиотеку прототипов в свой заголовок. Как 2_.

person Tiago Farias    schedule 06.08.2012
comment
я изменил его с закрытия на метод, и я не получаю никаких сообщений об ошибках. Он печатает Fine, когда я обращаюсь к нему непосредственно в браузере, но не тогда, когда я фактически меняю выбор в раскрывающемся меню. - person Ameya; 07.08.2012
comment
Что произойдет, если вы поместите предупреждение в событие onchange вместо remoteFunction? Если отображается предупреждение, то я думаю, что ваша проблема связана с библиотекой прототипов. Добавьте библиотеку прототипов в свой заголовок. Например, ‹g:javascript library=prototype /›. - person Tiago Farias; 07.08.2012
comment
Оповещение отображается. Нужна ли мне библиотека прототипов, если у меня уже установлен плагин jQuery, я думал, что плагин jquery теперь является библиотекой javascript по умолчанию, используемой Grails - person Ameya; 07.08.2012
comment
Это верно, если у вас есть Grails 2.0 или выше. - person Tiago Farias; 07.08.2012
comment
А как насчет отладчика клиентского кода? У вас есть инструменты разработчика firebug или chrome? Что он говорит, когда вы меняете параметры в своем выборе? - person Tiago Farias; 07.08.2012
comment
да, у меня есть grails 2.0.4, когда я меняю параметры в своем выборе, синтаксис отображается правильно в отладчике Chrome для новых добавленных параметров, он отображается так: ‹select name=​data onchange=​alert('Hi' )​ id=​data›​ ‹option value=​zxcv›​zxcv​‹/option›​ ‹/select›​ - person Ameya; 07.08.2012
comment
Нет, не с оповещением (мы знаем, что оно работает). Верните в него свой старый код remoteFunction и измените параметр, выбранный в вашем select. Проверьте, предупреждает ли он вас о каких-либо ошибках в правой части панели. - person Tiago Farias; 07.08.2012
comment
Да, я получаю сообщение об ошибке, вот что я получаю: Uncaught ReferenceError: jQuery не определен список: 50 onchange - person Ameya; 07.08.2012
comment
Привет, тиаго, я заставил его работать, я забыл добавить ‹g:javascript library=jquery /› в своей голове, но я не понимаю, почему мне нужно явно добавить это, если плагин уже установлен? - person Ameya; 07.08.2012
comment
Ну вот. Плагин установлен, вам просто нужно сказать, где вы хотите его использовать, я так думаю. Я отредактирую свой ответ и добавлю этот второй комментарий, вы можете +1, если вам это нравится. - person Tiago Farias; 07.08.2012

Синтаксис выглядит хорошо для меня. Постарайтесь убедиться, что ваши «codeInstance» и «data» не равны нулю. Кроме того, попробуйте передать имя контроллера следующим образом:

remoteFunction(action: 'translationById', controller: 'code')

Новая норма в Grails — использовать методы вместо замыканий:

def translationById(){
    println "fine"
}
person vprasad    schedule 06.08.2012
comment
Я почти уверен, что они не равны нулю, так как я заполняю раскрывающийся список, используя свойство данных codeInstance, и раскрывающийся список правильно заполняется. Я также указал контроллер, но он все еще не работает. - person Ameya; 06.08.2012