2010-05-27 5 views
0

Ruby on Rails를 통해 .js 파일에 '동적 경로'가 있는지 궁금합니다.레일스가있는 new.AjaxRequest의 동적 경로

예를 들어, 나는 다음과 같은있다 :이 응용 프로그램은 하위 폴더로 실행 내 프로덕션 서버에서 그러나 :

new Ajax.Request('/tokens/destroy/' + GRID_ID, {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'token=' + dsrc.id + '&authenticity_token=' + encodeURIComponent(AUTH_TOKEN)}) 

주요 URL은 'ID를/토큰// 파괴'입니다. 그래서이 아약스 호출에 대한 URL이 있어야합니다 '/ qrpsdrail/토큰// 파괴 : 아이디'

이가 호출되고있는 URL은 을 것// 1/qrpsdrail/그리드/1

메쉬를 나는 물론 할 수 .../../ 경로 -하지만 조금 hackish 보인다. 그것은 또한 결코 바뀌지 않는 라우팅에 의존하며,이 단계에서 나는 보장 할 수 없습니다. 저는이 문제에 대한 다른 해결책이 무엇인지보고 싶어합니다. 당신이 레일

에서 자바 스크립트를 사용하여 new.AjaxRequest에서 동적 경로를 사용할 수 있습니다

답변

1

어쩌면 조금 hackish 솔루션,하지만 난 구성 파일을 가지고 같은설명한은, 그래서 당신은 config.yml 내부처럼 뭔가를 할 수 :

development: 
    root:/

production: 
    root: /qrpsdrail/ 

당신이 당신의 Ajaxrequest를 빌드 할 때, 당신은

new Ajax.Request("#{AppConfig.root}tokens/destroy/' + ... 

를 작성할 수 그러나에 청소기 방법이 있어야한다처럼 아직도 보인다 이것을 해결하십시오;)

+0

나는 이것과 비슷한 것을했지만 그래도 여전히 "hackish"라고 생각합니다 ... 저는 방금 var ROOT_PATH = # {root_path}를 템플릿의 맨 위에 놓았고 정적 grid.js 라이브러리에서 사용할 수 있습니다. 아마도 내가 자바 스크립트 템플릿 (rjs?)을 사용하고 있습니다. 그러나 .js 파일처럼 캐시되지 않습니다. – Robbie

0

미리 :)에서

덕분에 자바 스크립트

function dynamic_ajax(GRID_ID) 
    { 
     new Ajax.Request("/tokens/destroy?"+GRID_ID, {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'token=' + dsrc.id + '&authenticity_token=' + encodeURIComponent(AUTH_TOKEN)}); 
    } 

HTML을

<a href="javascript:void(0)" onclick="dynamic_ajax('1')">Grid Id 1 </a> 
<a href="javascript:void(0)" onclick="dynamic_ajax('2')">Grid Id 2 </a> 
<a href="javascript:void(0)" onclick="dynamic_ajax('3')">Grid Id 3 </a> 
+0

문제는 내가 실제로 응용 프로그램의 다른 곳에서 초기화하는 일정이다 GRID_ID이 아닌 (이 코드는 개념만을위한 것입니다 작동하지 않을 수 있습니다) - 문제는 통화를 Ajax.Request로 URL은 절대 경로를 호출하기 때문에 두 환경 모두에서 작동하지 않습니다. 질문이 애매한 경우에는 미안합니다. – Robbie

0

경로를 ajax 호출을 시작하는 html 객체의 속성으로 설정할 수 있습니다. 예제는 다음과 같습니다

<a id='my_clicky_thing' href='#' rails_path='<%= tokens_destroy_path %>'>Click me</a> 

JQuery와

$('#my_clicky_thing').live('click', function(){ 
    var ajax_path = $(this).attr('rails_path'); 
    /* Do ajax stuff here with the path */ 
}); 

이것은 당신이 당신의 의견에처럼 당신이 당신의 .js 파일에 실제 레일 패스를 사용할 수 있도록 할

HTML.