2012-03-19 4 views
0

도메인 모델 (A) 편집을 처리하는 양식이 있습니다. 이 도메인 모델 hasMany 다른 도메인 모델 (B). 따라서 A에 새로운 Bs를 추가하기 위해 일부 입력 필드의 매개 변수를 컨트롤러에 보내는 사용자 지정 AJAX 함수를 구현하려고했습니다.외부 Javascript 파일의 컨트롤러/작업에 대한 URL

<g:form> 
<!-- other stuff concerning entity A --> 
    <p>Add B to A</p> 
    <input type="text" id="bName" /> <input type="text" id="bSomeProperty" <a href="#" id="addB">Add</a> 
</g:form> 

을 그리고 resources 플러그인로드 내 main.js에 자바 스크립트의 다음 부분을 추가 : 그렇게하기 위해서는

, 나는 다음과 같은 GSP를 만들었습니다.

$("#addB").click(function() { 
    $.ajax({ 
     url: '', // controller: a, action: addB 
     dataType: 'json', 
     data: { 
      bName: $('#bName').val(), 
      bSomeProperty: $('#bSomeProperty').val(), 
     } 
    }); 
}); 

그래서, 질문은 : 나는 현재의 컨트롤러와 액션 addB를 가리키는 URL을 검색 할 수 있습니까? Grails는 실제로 링크를 검색하는 몇 가지 메소드를 제공하기 때문에 가능한 경우 하드 코드를 작성하거나 상대 경로를 사용하고 싶지 않습니다.

자바에서 remoteFunction을 사용하면 jQuery를 사용하기 때문에 나에게 적합하지 않았습니다. 둘 다 잘 작동하지 않는 것 같습니다.

Grails, jQuery 및 AJAX에 대한이 블로그 기사 (http://alexduan.com/2011/02/17/grails-jquery-and-ajax/)도 있습니다. 그는 자바 스크립트 부분에서 변수를 사용합니다. 아쉽게도 contextPath 변수는 자바 스크립트가 GSP 페이지가 아닌 외부 파일에 있기 때문에 구문 분석되지 않습니다.

어떻게해야합니까?

옵션 :

  • (가 다소 인라인이기 때문에, 다소 추한)
  • 를 사용하여 페이지 내에서 (매우 강력한되지 않음) 상대 URL
  • remoteFunction 받기를 g:javascript 태그에 자바 스크립트 조각을 넣어 작동 방법 (jQuery 사용법)
  • 다른 건 없나요?

답변

0

내 프로젝트에서 첫 번째 옵션을 사용 : 나는 자바 스크립트 객체 글로벌 myapp.urls에 내 모든 매핑의 하위 집합을로드 등이

myapp.urls['mappingName'] = url 

이 문제가 발생 :

  • 공개되기 때문에 공개하려는 URL을 선택해야합니다.

  • 웹 크롤링 (예 : Google 봇) 당신이 이것을 위해 robots.txt를 만들지 않았다면이 링크들을 ollow하십시오.

    myapp.urls=eval(base64_decode('gYW55IGNhcm5hbCBwbGVhc3VyZS4==')); 
    

    그것은 완벽 하진하지만 작동 : 뭔가 같은보고를 얻을 수 있도록

는 그래서 인라인 호출을 Base64로 인코딩이 솔루션을 향상시킬 수 있습니다.

+0

감사! 다른 모든 Javascript 파일에서'contextPath'에 접근하여 컨트롤러와 액션에 대한 경로를 직접 만들 수 있도록 전역 변수를'main.gsp'에 추가했습니다. –