2015-04-10 2 views
3

Я пытаюсь передать данные с контроллера на javascript. Это, как вы это делаете,Передача нескольких переменных для рендеринга json в rails cotroller

respond_to do |format| 
    format.html 
    format.json { render json: {data: @data} } 
end 

А затем в файле просмотра, вы должны сделать это:

<%= javascript_tag do%> 
    window.data = <%= raw @data.to_json %> 
<%end%> 

<script> 
    for(i = 0; i < data.length; i++) { 
    alert(data[i]); 
    } 
</script> 

имеет смысл. Правильно?

Однако код выше, когда вы передаете только одну переменную в json-коде, т.е. переменную данных. Что мне нужно сделать, так это передать несколько переменных в код javascript.

Это должно быть сделано как:

respond_to do |format| 
    format.html 
    format.json { render json: {data: @data, data1: @data1, data2: @data2} } 
end 

Теперь - Как я должен получить доступ к переменным data1 & data2 в моем файле зрения? - Нужно ли мне изменять window.data? Я попробовал код ниже, но это не сработало. Дала мне ошибку аргумента.

<%= javascript_tag do%> 
    window.data = <%= raw @data.to_json, @data1.to_json %> 
<%end%> 

Любые провода будут оценены.

Cheers!

ответ

5

render json вызов будет оказывать один объект, поэтому постарайтесь, чтобы хранить все данные в одном объекте JSON (или массив):

respond_to do |format| 
    format.html 
    format.json { render json: {all_data: {data: @data, data1: @data1, data2: @data2}}} 
end 

На переднем конце:

<%= javascript_tag do%> 
    window.data = <%= raw @all_data.to_json %> 
<%end%> 

сейчас window.data должно иметь все необходимое в window.data.data, window.data.data1, window.data.data2.

+0

Спасибо за ваш ответ. Однако я боюсь сказать вам, что я не могу увидеть ожидаемый результат. Я сделал именно то, что вы меня просили, но выполнение 'alert window.data' дает мне значение null в моем javascript. –

+0

Вам нужно будет создать 'all_data' в вашей рубиновой модели, если вы покажете свою модель, я могу попытаться обновить ... – hagope

+0

Интересно. Хотя, если я передаю одну переменную, мне не нужно ничего создавать. Как добавить его в модель btw? –

Смежные вопросы