profondément imbriqués content_tag, concat et rails 3
Je suis frustré à l'aide de Rails 3.2 et faire un helper pour Bootstrap auxiliaires modaux. Je ne comprends pas quand vous en avez besoin concat par rapport à quand vous n'avez pas parfois je me retrouve avec des balises manquantes et parfois je me retrouve avec une table de hachage avec toutes les options entre avant et se terminant balises. Lorsque j'utilise concat sur le contenu de la balise avec une fin tout l'enfer se déchaîne. Tout ce que je veux faire est de reproduire ce code html:
<div id="stupid_modal" class="modal hide fade" tabindex="-1" data-width="760">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fontello-icon-cancel-1"></i></button>
<h4>Modal header</h4>
</div>
<div class="modal-body">
<div class="page-header">
<p>Test header 1 2 3.</p>
</div>
<div class="row-fluid">
content here... blah blah
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn">Close</button>
<button type="button" class="btn btn-green">Save changes</button>
</div>
</div>
Je ne peux pas pour la vie de me procurer le bouton dans le h4 dans la modale d'en-tête à travailler sur la droite. Ni puis-je obtenir de l'en-tête de page apparaissent dans le modal corps.
Mon helper ressemble à ceci:
module ModalHelper
def modal(css_id, header_text, hidden = true, options = {},&block)
class_text = "modal"
class_text += " hide fade" if hidden
content_tag(:div, :class => 'modal hide fade', :id => css_id, :style => ("display:none;" if hidden)) do
concat modal_header(header_text)
concat modal_body(&block)
concat modal_footer
end
end
def modal_button(link_text, href)
modal_caller link_text, href, :button
end
def modal_link(link_text, href)
modal_caller link_text, href
end
private
def modal_caller(link_text, href, type = nil)
options = { :"data-toggle" => "modal" }
options.merge!({ :class => "btn" }) if type == :button
link_to link_text, "#" + href, options
end
def modal_header(header_text)
content_tag(:div, :class => 'modal-header') do
concat content_tag(:button,(content_tag(:i, :class => 'fontello-icon-cancel-1')),:class => 'close', :"data-dismiss" => 'modal', :"aria-hidden" => 'true')
concat content_tag(:h4, header_text)
end
end
def modal_body(page_header = "")
content_tag(:div, :class => 'modal-body') do
content_tag(:div, :class => 'page-header') do
concat content_tag(:p, page_header)
end
content_tag(:div, :class => 'row-fluid') do
yield
end
end
end
def modal_footer
content_tag(:div, :class => 'modal-footer') do
concat content_tag(:button, 'Close', type: "button", :class => 'btn btn-boo', :"data-dismiss" => 'modal')
concat content_tag(:button, 'Save', type: "button", class: 'btn btn-green')
end
end
fin
Et le lien ressemble à ceci:
<%= modal_link "New Stupid Modal", "stupid_modal" %>
Et le modal html ressemble à ceci:
<%= modal('stupid_modal', 'Shouldnt this work?', submit: true, tabindex: '-1') do %>
<% render 'stupid_modal_partials/stupid_modal' %>
<% end %>
La sortie est ceci:
<button aria-hidden="true" class="close" data-dismiss="modal"><i>{:class=>"fontello-icon-cancel-1"}</i></button>
qui ressemble à ceci dans le code source de la page:
<i>{:class=>"fontello-icon-cancel-1"}</i>
Mise à jour:
changer modal_header œuvres:
def modal_header(header_text)
content_tag(:div, :class => 'modal-header') do
concat content_tag(:button,(content_tag(:i, "",:class => 'fontello-icon-cancel-1')),:class => 'close', :"data-dismiss" => 'modal', :"aria-hidden" => 'true')
concat content_tag(:h4, header_text)
end
end
Mais ce n'est pas le cas:
def modal_header(header_text)
content_tag(:div, :class => 'modal-header') do
concat content_tag(:button,:class => 'close', :"data-dismiss" => 'modal', :"aria-hidden" => 'true') do
concat content_tag(:i, "",:class => 'fontello-icon-cancel-1')
end
concat content_tag(:h4, header_text)
end
end
qui pose la question, wzup avec concat? et ai-je raté quelque chose, j'ai aussi essayé guillemets vides comme deuxième argument le bouton content_tag
Cet article explique l'utilisateur de
concat
et capture
bien: thepugautomatic.com/2013/06/helpers
OriginalL'auteur Michael K Madison | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
Vous ne devez jamais utiliser
concat
.Chaque Rails helper retourne une chaîne avec du code html:
De sorte que votre plus simple méthode d'aide serait celui-ci:
Si vous disposez de plusieurs chaînes de html juste résumer:
Notez que vous ne pouvez pas les appeler comme ils n'ont pas de modifier l'affichage
Pour les blocs les mêmes règles s'appliquent:
Comme une note de côté, juste en utilisant les Rails des aides pour construire l'ensemble de point de vue n'est pas vraiment leur but. Ils sont censés aider vous dans des endroits dynamiques, statiques html est fait de mieux dans ERB modèles.
OriginalL'auteur Simon Perepelitsa