2009-04-07 4 views
13

레일즈를 사용하고 있지만, jQuery를 사용하여 눈에 띄지 않게 모든 자바 스크립트를 application.js에서 사용하고 있습니다.레일즈에서 눈에 잘 띄지 않는 jQuery 자동 완성

불행히도 URL을 참조하기가 어렵습니다. 예를 들어 필드 자동 완성 동작을 제공하려는 경우 레일 url_for을 사용할 수 없기 때문에 자동 완성 URL을 application.js에 하드 코딩해야합니다.

application.js erb를 사용할 수 있습니까? 내가 잘못 생각한거야?

답변

6

유효성 검사기를 통과하지 못할 수도있는 마크 업을 신경 쓰지 않으면 url을 양식 또는 양식 필드의 속성에 추가 한 다음 jQuery로 속성을 가져올 수 있습니다.

그것은 레일 3.0처럼 보인다는 HTML5 사용자 정의 데이터를 사용하여 자바 스크립트 헬퍼와 함께이 길을 갈 수있는 것은 속성 : DHH @ Railsconf 09

2

예, 가능합니다. 현재 레일 버전에서는 파일 application.js.erb을 호출 할 수 있습니다. 이전 버전에서는 스스로 롤백하거나 this과 같은 것을 가져올 수 있습니다.

+0

쿨! 이게 가장 좋은 방법인가요? 이 방법을 사용합니까? 그것은 나에게 좋게 들리지만, 나는 여전히 곡식에 맞서 긴장하고있다. –

+1

AFAIK, 많은 사람들이 혼자서 그것을하고 있었기 때문에 그것을 레일로 만들었습니다. 이것은 매우 일반적인 사용 패턴입니다. 한가지주의 할 점은 경로와 같은 반 정적 인 것들을 주입하기위한 것입니다; 내용이 세션 내에서 변경 될 경우 javascript를 대신 ajax 래퍼로 보냅니다. – MarkusQ

+0

사실 이것은 작동하지 않는 것 같습니다 - 파일을/public/javascripts 밖으로 옮겨야합니까? 방금 파일 이름을 바꾸면 브라우저가 'application.js'를 요청할 때 라우팅 오류가 발생합니다. –

2

application.js.erb하지 마세요. 캐싱이 포함 된 경우에도 좋지 않습니다. 끝점 (데이터를 가져 오는 URL)을 양식의 작업 URL과 동일하게 자동 완성하십시오. application.js&ac=1을 추가하고 컨트롤러가 이해하도록하십시오.

1

당신은 그건 ... 그냥 자동 완성 기능을 추가 한 JS 함수를 생성 하드 코딩 할 필요가 없습니다 청취자, 그리고 자동 완성에 대한 매개 변수를 받아들이고, 전화 당신의 템플릿에서 JS 기능 :

(명확성을 위해 단순화 된 코드)

application.js :

function add_autocomplete(id, url) { 
    $("#" + id).autocomplete(
     source: url 
    ); 
}; 

application_helper.rb :

def add_autocomplete(id, url) 
    render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>" 
end 

ERB 템플릿 :

<input id="i_want_autocomplete" /> 
<%= add_autocomplete("i_want_autocomplete", items_js_path() %> 
관련 문제