2017-02-03 6 views
1

Имея следующий код видом Еврорадио:В режиме Rails ERB, как я могу предотвратить преобразование подчеркивания в дефис?

<%= content_tag(:div, id: 'stat', data: {_var_: '_foo_'}) %> 

генерирует следующий HTML:

<div id="stat" data--var-="_foo_"> 
</div> 

Мое намерение состоит в том, чтобы получить

<div id="stat" data-_var_="_foo_"> 
</div> 

т.е. я не хочу

data--var- 

но вместо

data-_var_ 

Как я могу добиться этого, пожалуйста?

ответ

2

Как указано в ActionView :: Helpers :: TagHelperdocs:

Для дружат с конвенциями JavaScript податрибута dasherized. Например, ключ user_id будет отображать как data-user-id и таким образом получить доступ как dataset.userId.

Для иллюстрации, вы можете проверить в исходном коде Rails (tag_helper.rb) prefix_tag_option вызова key.to_s.dasherize:

def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block) 
    #...# 
    content_tag_string(name, content_or_options_with_block, options, escape) 
    #...# 
end 

def content_tag_string(name, content, options, escape = true) 
    tag_options = tag_options(options, escape) if options 
    #...# 
end 

def tag_options(options, escape = true) 
    # ... 
    # TAG_PREFIXES = ['aria', 'data', :aria, :data].to_set 
    # invoke prefix_tag_option only if it's a data- sub-attributes 
    if TAG_PREFIXES.include?(key) && value.is_a?(Hash) 
     #...# 
     output << prefix_tag_option(key, k, v, escape) 
    end 
    #...# 
end 


def prefix_tag_option(prefix, key, value, escape) 
    key = "#{prefix}-#{key.to_s.dasherize}" 
    #...# 
end 

Если вы не хотите dasherize ключей, возможный " обходной путь « - установить data-attribute непосредственно в вариантах хэша, например:

<%= content_tag(:div, "test", { id: 'stat', 'data-_var_': '_foo_' }) %> 

Таким образом, Rails будет оказывать:

<div id="stat" data-_var_="_foo_">test</div> 
+0

Престижности @mrlew за очень подробный и дидактический ответ. Спасибо ! –

+0

@AlbertAnstett приветствую :) – mrlew

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

  • Нет связанных вопросов^_^