Методы Ruby в рамках JavaScript в HAML

У меня есть сценарий jQuery, который добавляет новое поле к форме, и это поле содержит динамическую информацию от массива. Проблема состоит в том, что я не могу выяснить, как добавить array.each для заполнения опций избранного поля в рамках JavaScript, не повреждая добавление отступа HAML и вызвав ошибки.

Вот моя лучшая попытка, которая не работает:

%script(type="text/javascript")  
  $('#mylink').click(function() {  
  $('#mylink').after('<select>  
  - myarray.each do |options|  
     <option value="#{options.id}">#{options.name}</option>  
  </select>);  
  )};

Также попробованный это: фильтр JavaScript без удачи.

57
задан Josh 14 April 2010 в 21:08
поделиться

2 ответа

Обычно, если что-то вызывает трудности в haml, это означает, что вам следует рефакторить сложный бит в помощника или частичный и вызывать его.

// some_helper.rb
def new_snazzy_select_tag(options = [])
  select_tag 'tag_name_here', options.map { |option| [option.id, option.name] }
end

Также для рендеринга javascript следует использовать фильтр :javascript, поскольку он помещает его в тег script и позволяет делать отступы.

Наконец, вы можете использовать #{ruby_expression} в любом месте в haml, включая фильтры :javascript, что очень удобно, когда вам нужно вывести результат выражений ruby в места, которые не являются непосредственным содержимым html-элементов.

// some_view.html.haml
:javascript
  $('#mylink').click(function() {  
    $('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}");
  };
103
ответ дан 24 November 2019 в 19:32
поделиться

Попробуйте это, это должно сработать (все, что я сделал, это удалил один пробел в пятой строке и добавил заключительную цитату в шестой):

%script(type="text/javascript")
  $('#mylink').click(function() {
  $('#mylink').after('<select>
  - @myarray.each do |options|
    <option value="#{options.id}">#{options.name}</option>
  </select>');
  )};

Однако, если вы запускаете это с помощью скрипта ruby ​​или фреймворка сортировки, почему бы просто не сделать это вне шаблона? Это, наверное, было бы наиболее подходящим. В rails / sinatra и других фреймворках для этого можно использовать вспомогательный метод. Если вы посмотрите на ссылки на haml, они фактически не рекомендуют использовать - для оценки ruby.

8
ответ дан 24 November 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: