programing

Grails Resources Plugin 및 AJAX가 javascript를 로드했습니다.

goodsources 2023. 8. 19. 10:14
반응형

Grails Resources Plugin 및 AJAX가 javascript를 로드했습니다.

grils 1.3.7 애플리케이션에 리소스 플러그인을 추가했는데 비동기식으로 로드되는 javascript를 제외하고는 모두 정상적으로 작동합니다.

그래서 만약 내가 포함된 템플릿을 가지고 있다면,

<r:script>
    // javascript here
</r:script>

그리고 js 코드가 실행되지 않는 ajax를 통해 로드하면 다음 오류가 발생합니다.

r:layoutResources 태그에 대한 일부 호출이 누락된 것 같습니다.

페이지가 이미 렌더링되었으며 새로 추가된 r:script js 코드를 처리할 r:layoutResources가 없기 때문에 의미가 있습니다.

내가 찾은 유일한 해결책은 추가하는 것입니다.render r.layoutResources(disposition:"defer") 사후에render(template:...)컨텐츠를 비동기적으로 렌더링하는 컨트롤러 작업에서 사용할 수 있습니다.

더 명확한 해결책이 있습니까?

AJAX 응답을 위한 전용 레이아웃을 구축하는 것이 더 좋습니다.

<g:layoutBody/>
<r:layoutResources disposition="defer"/>

Grails 2.0을 사용하는 경우 렌더링 방법에서 레이아웃을 지정할 수 있습니다.render template: "...", layout: "ajax") 또는 규칙에 따라 레이아웃을 사용합니다.

내가 생각하는 더 나은 옵션은 템플릿 조각에 user:script를 사용하지 않는 것입니다.그냥 일반 스크립트 태그를 사용합니다.layoutResources 항목이 필요하지 않은 경우 이러한 fragment 내의 Resources에서 아무런 이점도 얻을 수 없습니다.

때로는 고전적인 방법이 최고입니다.

저는 항상 Peter Ledbrook 응답을 따르지만, 레이아웃을 사용하는 대신 템플릿을 사용하여 기본 레이아웃에서 렌더링할 내용을 자동화합니다.내 main.gsp는 다음과 같습니다.

<!DOCTYPE html>
<g:if test="${request.xhr}">
    <g:render template="/layouts/content" />
</g:if>
<g:else>
    <html>
   ...  <!-- Main layout stuff: application resources, logo, main menu, etc -->
   <div id="content">  <!-- Somewhere in the body -->
          <g:render template="/layouts/content" />
       </div>
    </html>
</g:else>

그런 다음 _content.gsp 템플릿은 다음과 같습니다.

<g:layoutBody />
<r:layoutResources disposition="defer"/>
<!-- Ajaxify your relative links with the framework of your choice -->

그러면 모든 관련 링크와 양식을 자동으로 Ajax화할 수 있으며 Ajax 응답이 항상 content div 내부에 있기 때문에 컨트롤러에서 작업이 필요하지 않습니다(다른 응답 없음).

언급URL : https://stackoverflow.com/questions/8736277/grails-resources-plugin-and-ajax-loaded-javascript

반응형