ruby-on-rails – 如何在视图文件中管理if-then爆炸?
发布时间:2020-12-17 03:19:46 所属栏目:百科 来源:网络整理
导读:如果这不遵循良好的问题指导方针,我表示歉意,但我希望它在 How to Manage CSS Explosion课堂上表现良好并且收到同样有用的回复. 我熟悉一些基本的视图冗余缓解策略,如下所示: 在适当的地方使用帮助者 不要重复自己 使用部分和布局 如果我在上面的列表中遗漏
如果这不遵循良好的问题指导方针,我表示歉意,但我希望它在
How to Manage CSS Explosion课堂上表现良好并且收到同样有用的回复.
我熟悉一些基本的视图冗余缓解策略,如下所示: >在适当的地方使用帮助者 如果我在上面的列表中遗漏了一些重要的想法,请随意提出建议. 尽管如此,我仍然认为在我看来有几个维度/自由度,导致很多if-then语句或至少三元块.例如,在我正在搞乱的事情中,我正在为一个程序的标题栏工作,当三个“大”变量调用视图时: >用户是否是管理员 它最终看起来像这个烂摊子: <% content_for :subheader do %> <div class="row"> <% if @user %> <% if @user == current_user %> <%= link_to 'My programs',user_programs_path(current_user),:class => 'active' %> <% else %> <%= link_to "#{@user.username}'s programs",user_programs_path(@user),:class => 'active' %> <% end %> <%= link_to 'Browse all programs',programs_path %> <% else %> <% if current_user %> <%= link_to 'My programs',user_programs_path(current_user) %> <% end %> <%= link_to 'Browse all programs',programs_path,:class => 'active' %> <% end %> <%= link_to 'New Program',new_program_path,:class => 'admin' if current_user.admin? %> </div> <% if @regions %> <div class="row second"> <%= link_to 'Regional program search',request.fullpath,:class => 'active' %> </div> <% end %> <% end %> 丑陋.可读且易于访问,但很难看.一些建议? 在经验和LESS之类的新技术之间,我已经非常擅长减少我的CSS文件,但我仍然遇到了MVC视图的爆炸问题. 解决方法
我会使用帮助器和模型定义来干掉你的代码:
class User def possesive self == current_user ? 'My' : "#{username}'s" end end module ...Helper def user_program_link user if user link_to "#{user.possesive} programs",user_programs_path(user),:class => 'active' elsif current_user link_to 'My programs',user_programs_path(current_user) end end end 然后,您可以简化user_program_path调用的所有if语句: <%= user_program_link @user %> 这会将您的查看代码减少到: <% content_for :subheader do %> <div class="row"> <%= user_program_link @user %> <% if @user %> <%= link_to 'Browse all programs',programs_path %> <% else %> <%= link_to 'Browse all programs',:class => 'active' %> </div> <% end %> <% end %> 继续此过程以干掉其余代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |