복붙노트

[RUBY-ON-RAILS] 어떻게 슬림 템플릿 내 커피 스크립트 엔진에 액세스 인스턴스 변수

RUBY-ON-RAILS

어떻게 슬림 템플릿 내 커피 스크립트 엔진에 액세스 인스턴스 변수

나는 내가 인스턴스 변수를 설정하고있는 레일 컨트롤러가 -

@user_name = "Some Username"

내 .slim 템플릿에서 나는 자바 스크립트를 생성하는 커피 엔진을 사용하고 클라이언트 SIE의 자바 스크립트 코드에서 사용자 이름을 인쇄 할입니다 -

coffee:
  $(document).ready ->
    name = "#{@user_name}"
    alert name

하지만이 생성되는 자바 스크립트는 무엇입니까 ??

$(document).ready(function() {
    var name;
    name = "" + this.my_name;
    alert(name);
}

어떻게 내 커피 스크립트 코드에서 I 액세스 컨트롤러 인스턴스 변수를 할 ??

나는 커피 스크립트를 사용할 때 같은 문제가있을 것 HAML을 추측하고 있기 때문에 내가 HAML로이 태그입니다.

해결법

  1. ==============================

    1.무엇이 일어나고하는 것은 평가와 커피 스크립트 소스에 주입 것 루비 코드로, 커피 스크립트로 해석되고 있음 '{@ _ 이름}는 # "입니다. 당신은 "내 커피 스크립트 소스에 루비 변수 주입 I을 어떻게?", 요구하고

    무엇이 일어나고하는 것은 평가와 커피 스크립트 소스에 주입 것 루비 코드로, 커피 스크립트로 해석되고 있음 '{@ _ 이름}는 # "입니다. 당신은 "내 커피 스크립트 소스에 루비 변수 주입 I을 어떻게?", 요구하고

    짧은 대답은 :이 작업을 수행하지 마십시오. (당신은 소스에 주입하는 임의의 문자열을 사용할 경우 수행해야 할 것 같은) 모든 요청에 ​​커피 스크립트를 컴파일하는 데에 상당한 성능 오버 헤드가 거기에 있기 때문에 레일 팀은,하지 3.1 템플릿에 커피 스크립트 내장 지원 의도적 인 결정을 내렸다 .

    내 충고는 순수 자바 스크립트로 별도로 루비 변수를 제공하고 예컨대 당신의 커피 스크립트에서 그 변수를 참조하는 것입니다 :

    javascript:
      user_name = "#{@user_name}";
    coffee:
      $(document).ready ->
        name = user_name
        alert name
    
  2. ==============================

    2.나는 모든 비용에 인라인 자바 스크립트를 회피하는 경향이있다.

    나는 모든 비용에 인라인 자바 스크립트를 회피하는 경향이있다.

    자바 스크립트에서 사용하는 당신의 HTML에 저장 변수에 좋은 방법은 HTML5의 데이터 속성을 사용하는 것입니다. 이것은 눈에 거슬리지 자바 스크립트를 유지하기에 이상적입니다.

  3. ==============================

    3.당신은 또한 사용할 수 있습니다 :

    당신은 또한 사용할 수 있습니다 :

    $(document).ready ->
      name = <%= JSON.generate @user_name %>
      alert name
    

    JSON은 자바 스크립트의 일부이기 때문이다.

  4. from https://stackoverflow.com/questions/8108511/how-to-access-instance-variables-in-coffeescript-engine-inside-a-slim-template by cc-by-sa and MIT license