6

렌더링 된 페이지에서 javascript로 전달하려는 루비 (변수 및 객체/해시)에 일부 값이 있습니다. 현재이 메소드를 사용하여 클라이언트 끝에서 변수를 선언하는 자바 스크립트를 작성합니다.javascript에 여러 레일 변수 전달

def declare_as_js_vars vars 
    string = "" 
    vars.each do |name, value| 
     string += self.declare_as_js_var(name, value) 
    end 
    string 
    end 

    def declare_as_js_var name, value 
    name.to_s + "='" + value.to_s + "';" 
    end 

여기서 문제는 개체를 선언 할 수 없으며 개별적으로 vars를 선언해야한다는 것입니다. 이것이 레일에서 쉽게 해킹 할 수있는 방법이 있는지 궁금 해서요.

자바 스크립트에 변수 및 객체를 전달하는 방법은 무엇입니까? 나는 작업을 수행하는 데 유형 JSON의 스크립트 태그를 사용하려면)

+0

관련 : stackoverflow.com/questions/2464966/passing-ruby-variables- to-javascript-function-in-rails-view –

답변

0

당신이 objects.to_json 작업을 시도해야을 제공하십시오. 그것은 전역 네임 스페이스를 오염시키는 것을 피하고 Rails는 객체를 JSON으로 직렬화하는 데 큰 도움을줍니다.

당신은 당신이보기에 이런 식으로 뭔가를 사용할 수 있습니다 :

<script id="my_vars_json" type="text/json"> 
    <%= @my_vars.to_json %> 
</script> 

그리고 그것은 당신에게 달려 자바 스크립트와 JSON을 구문 분석 할 수 있습니다. jQuery를 사용하고 싶습니다.

$(function() { 

    var myVarsJSON = $("#my_vars_json").html(), 
     myVars  = $.parseJSON(myVarsJSON); 

    console.log(myVars); 

}); 

희망이 있습니다.

8

일부 구문 예를 어쩌면

+2

'@ my_vars'가 데이터베이스의 다중 엔트리를 나타낼 때 (예 : 컨트롤러의 @my_vars = MyVar.all, MyVar가 모델 인 경우)이 방법에 문제가있었습니다. '<% = raw @ my_vars.to_json %> '를 사용하여이 문제를 해결했습니다. 귀하의 답변 주셔서 감사합니다, 그것은 도움이되었다! –

10

조금 늦었지만 다른 사람들에게 도움이 될 수도 있습니다. gon이라는 멋진 보석이 있습니다.이 보석은 레일스에서 ​​자바 스크립트로 변수를 전달할 때 매우 유용합니다. 전체 개체를 보낼 수도 있습니다.

컨트롤러에서 당신은 자바 스크립트에 그것은 또한 그것에 대해 railscast 있습니다

alert(gon.your_int) 
alert(gon.your_other_int) 
alert(gon.your_array) 
alert(gon.your_hash) 
alert(gon.your_object.name) 

처럼 사용할 수 있습니다이

@your_int = 123 
@your_array = [1,2] 
@your_hash = {'a' => 1, 'b' => 2} 
gon.your_int = @your_int 
gon.your_other_int = 345 + gon.your_int 
gon.your_array = @your_array 
gon.your_array << gon.your_int 
gon.your_hash = @your_hash 
gon.your_object = Table.find(params[:id]) 

같은 것을 할 수 있습니다.

1

Gon gem을 사용하면 가장 좋은 해결책이라고 생각합니다. 도 확인해보십시오. video casts

0

그 보석이 client variable 인 것으로 나타났습니다. 구성 및 변수가 클라이언트에 전달되고 클라이언트에서 쉽게 얻을 수 있습니다.

2

데이터베이스에서 사용자의 이름을 가져와 값을 JSON 형식의 javascript 변수에 전달해야했습니다.

내가 다음 erb 파일에 ruby 사용자 테이블에서 idfirstname 속성을 걸립니다 토큰이라는 변수

ActiveRecord::Base.include_root_in_json = false 

    @token = User.all.to_json(only: [:id, :firstname]) 

를 선언, 나는 다음 줄,

var tokenList = <%= @token.html_safe %> 
0

를 받아 사용 이거 봐요.

http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs 가장 쉬운 방법 중

하나는 루비 태그는 컨트롤러 액션에 정의 된 변수에 액세스 할 수있는 js.erb 파일을 사용하는 것입니다.

자바 스크립트에 응답 할 수있는 작업을 지정하여 컨트롤러 작업에서 respond_to 블록을 사용해야합니다.

items_controller.rb

class ItemsController < ApplicationController 

    def action 
    respond_to do |format| 
     format.js 
     #format.html {} # These are for allowing other types of formats to be responded to. 
     #format.json {} # But they are not necessary for using this js.erb way of doing things. 
    end 
    end 

end 

/views/items/action.js.erb

$(div).html('The cat has erased your page'); 
관련 문제