2012-02-10 2 views
0

У меня есть div, который я спрятал, когда пользователь нажимает на ссылку и показывает, когда они нажмут ее снова. Мы хотим, чтобы div рухнул, когда пользователь вернулся, если они решили скрыть его, поэтому мы добавили логический столбец hide_todo в нашу пользовательскую базу данных, и я добавил метод для проверки значения в user_controller. Скрытие выполняется с помощью jQuery, и мы хотим изменить значение hide_todo на true, если пользователь нажимает Hide и false, когда пользователь нажимает Show. Как получить доступ к переменной Ruby в application.js?Доступ к логическому значению переменной Ruby в `application.js`

+0

Вместо того, чтобы скрывать его с помощью jQuery, я бы добавил класс к этому элементу с отображением: none' при рендеринге, чтобы предотвратить мерцание содержимого. если вы хотите сохранить состояние div, вам нужно использовать ajax для этого. – phoet

ответ

0

Ну, мы закончили с использованием $.get('toggle_hide');, добавив метод контроллеру для переключения логического и сопоставления с ресурсами в route.rb. Спасибо за предложения, хотя!

2

Есть 3 способа доступа рубин переменных в ЯШАХ:

A) Если вы используете рельсы 3.1+ с трубопроводом активов, вы можете добавить .erb расширение в файл, как это: «application.js. Еврорадио». Теперь вы можете использовать метки erb внутри .js <% ruby.code(); %> Это, я бы сказал, странный способ сделать это, и это будет восприниматься только в особых случаях.

B) Обычно вы добавляете данные, необходимые для DOM вашего документа HTML, и извлекаете данные из него.

Например, в вашем ERB (или аналогичным образом в Haml) шаблона сделать STH так:

<div id="collapsable" data-show="<%= model.hide.todo%>"> </div> 

теперь JQuery вы можете получить доступ к данным в следующим образом:

hide_todo = $("#collapsable").data("show"); 

C) Другой способ - сделать вызов ajax, который будет возвращать данные из приложения rails.

В вашем случае я рекомендую второй метод.