IT이야기

RoR의 자바 스크립트 및 HAML에 변수 값 삽입

cyworld 2021. 4. 18. 10:26
반응형

RoR의 자바 스크립트 및 HAML에 변수 값 삽입


ZenDesk를 사용하기 위해 다음과 같은 기능이 있습니다. 다음과 같이 current_user 세부 정보를 양식에 삽입하고 싶습니다. (이것은 html.haml 템플릿에서 가져온 것입니다). 그러나 나는 이것을 작동시키는 방법을 알 수 없습니다.

:javascript
    if (typeof(Zenbox) !== "undefined") {
      Zenbox.init({
        dropboxID:   "xxxxx",
        url:         "xxxxx.zendesk.com",
        tabID:       "support",
        tabColor:    "black",
        tabPosition: "Left",
        requester_name:  =current_user ? "#{current_user.first_name} #{current_user.last_name}" : "" ,
        requester_email: =current_user ? "#{current_user.email}" : "" ,
        hide_tab: true
        });
    }

요컨대, haml의 : javascript 요소에 rails 변수를 어떻게 주입합니까?


이것은 즉 작동합니다. 모든 인라인 루비를 안에 넣으십시오 #{}.

requester_name:  "#{current_user.first_name + ' ' + current_user.last_name if current_user}",
requester_email: "#{current_user.email if current_user}",

Direct #{}는 간단한 문자열에 대해 작동하지만 일반적으로 가장 확장 가능하고 안전한 솔루션은 아닙니다.

예를 들어 Ruby의 리터럴 백 슬래시는 자바 스크립트에서 문제를 일으켜 개행 문자로 해석됩니다.

- a = "\\n"
:javascript
  '#{ a }' !== "\\n"

에서 이 멋진 레일 캐스트 , 다음 방법을 사용할 수 있습니다 :

escape_javascript

별칭 : j.

문자열에서만 작동합니다.

백 슬래시 이스케이프와 같이 자바 스크립트 문자열에서 특별한 의미를 가질 수있는 문자를 자바 스크립트 문자열 리터럴 따옴표 안에 넣기에 적합한 형식으로 이스케이프합니다.

html_safe입력 상태를 유지 하므로 html_safe그렇지 않으면으로 <이스케이프되는 특수 HTML 문자가 필요합니다 &lt;.

- a = "\\n<"
:javascript
  '#{ j(a)           }' === '\\n&lt;'
  '#{ j(a).html_safe }' === '\\n<'

to_json + html_safe

JSON은 거의 Javascript 객체 리터럴 표기법의 하위 집합 이기 때문에 작동 합니다 .

해당 데이터 유형의 JSON 조각으로 변환되는 문자열, 배열 및 정수를 포함한 모든 해시 개체에서 작동합니다.

- data = { key1: 'val1', key2: 'val2' }
:javascript
  data = #{ data.to_json }
  data.key1 === 'val1'
  data.key2 === 'val2'

데이터 속성

속성에 값을 추가하고 Javascript DOM 작업으로 검색합니다.

content_tag도우미 와 함께하면 더 좋습니다.

= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
  $('#data').data('key1') === 'val1'
  $('#data').data('key2') === 'val2'

업무에 특화된 라이브러리 : https://github.com/gazay/gon

아마도 가장 강력한 솔루션 일 것입니다.

Gemfile :

gem 'gon'

제어 장치:

gon.key1 = 'val1'
gon.key2 = 'val2'

Layout app/views/layouts/application.html.erb:

<html>
<head>
  <meta charset="utf-8"/>
  <%= include_gon %>

View:

:javascript
  gon.key1 === 'val1'
  gon.key2 === 'val2'

ReferenceURL : https://stackoverflow.com/questions/4708369/injecting-variable-values-into-javascript-and-haml-in-ror

반응형