Grails remoteLink: целая страница загружена в ответ - PullRequest
1 голос
/ 23 февраля 2012

Во-первых, извините за мой плохой английский, я француз.

Вот проблема:

У меня есть шаблон, который выглядит следующим образом:

<p>
<strong>Whas this answer usefull ?</strong>
<g:remoteLink action="niceAnswer"
              class="btn rate-reply"
              update="comment-${ comment.id }"
              params="${ [commentId: comment.id, nice: true, productId: productId] }">
              Yes
</g:remoteLink>
<g:remoteLink action="niceAnswer"
              class="btn rate-reply"
              update="comment-${ comment.id }"
              params="${ [commentId: comment.id, productId: productId] }">
              No
</g:remoteLink>

Здесь GSP для перезагрузки фрагмента страницы:

<div class="rating" id="comment-${ comment.id }">
    <g:render template="affRating" model="${ [comment: comment, productId: product.id] }" />
</div>

Здесь javascript, который генерируется (см. Через firebug):

<a class="btn rate-reply" action="niceAnswer" onclick="jQuery.ajax({type:'POST',data:{'commentId': '723','nice': 'true','productId': '872'}, url:'/macsf-fronts/action/commentaire/reponse-utile',success:function(data,textStatus){jQuery('#comment-723').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){}});return false;" href="/macsf-fronts/action/commentaire/reponse-utile?commentId=723&nice=true&productId=872"> Yes </a>

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

def niceAnswer() {
    def comment = DocCommentaireSite.get(params.commentId)
    if (comment && session["comment_${comment.id}"] == null) {
        if (params.nice) {
            comment.nbYesReponseUtile++
        }
        comment.nbReponseUtileVote++
        session["comment_${comment.id}"] = comment.id
        comment.save()
    }

    def product = DocProduitSite.get params.productId
    if (request.xhr) {
        log.debug "niceAnswer : All is good"
        render template: 'affRating', 
               model: [comment: comment, productId: params.productId]
    } else {
        log.debug "niceAnswer : bad behaviour"
        def slugMap = referenceService.getSlugAndParentSlug(product)
        log.info "slugMap : ${slugMap}"
        redirect controller: 'frontRequest', action: 'index', params: [slug: slugMap.slug, parentSlug: slugMap.parentSlug]
    }
        log.debug "niceAnswer : wtf ?!"
}

Журнал «Все хорошо» является единственным, который отображается.Но каждый раз, когда вся страница перезагружается в ответе, я действительно не понимаю, почему.

Заранее спасибо,

Snite

Ответы [ 4 ]

1 голос
/ 27 февраля 2012

Это происходит потому, что вы не прикрепили библиотеку JavaScript в качестве ресурса к своей странице. Таким образом, браузер не может вызвать указанную функцию и просто переходит по ссылке. Для исправления ситуации добавьте в шапку:

<g:javascript library="jquery"/>
<r:layoutResources/>
1 голос
/ 23 февраля 2012

Всякий раз, когда у меня это случалось, это происходило потому, что у меня не было этого в моем GSP:

<g:javascript library="jquery" />
0 голосов
/ 21 марта 2012

Я наконец нашел ответ.

Это было из-за выполнения js:

jQuery('.rating').find('.btn').click(function(e){ 
  e.preventDefault(); 
 jQuery(this).closest('div').load('?zajax=reponse'); 
}); 

Этот код, использованный дизайнером, был для демонстрации и перезагрузил страницу. Прокомментируйте этот код, чтобы решить проблему.

Не легко найти!

Извините за ответ только сегодня, и спасибо за ваш!

0 голосов
/ 28 февраля 2012
<g:javascript library="prototype" />
...