Rails 3 - 自定义 link_to 帮助器(具有默认类和添加类的能力)

发布于 2024-12-22 17:10:05 字数 351 浏览 5 评论 0原文

我正在尝试连接一个自定义助手,该助手具有默认类“pjax”,但也保留在需要时添加类的能力。

示例:

link_to_pjax('pagename', page_path, :class => 'current')

所以助手会默认添加“pjax”,以及类“current”,或者传入的任何内容。

def link_to_pjax(name, path, options = {:class => 'pjax'})
    link_to(name, path, options)
end

语法让我感到害怕。任何建议将不胜感激。

I'm trying to hook up a custom helper that has a default class 'pjax' but also retains an ability to add classes where need be.

Example:

link_to_pjax('pagename', page_path, :class => 'current')

So the helper would add the 'pjax' by default, and also the class 'current', or whatever is passed in.

def link_to_pjax(name, path, options = {:class => 'pjax'})
    link_to(name, path, options)
end

The syntax is freaking me out. Any advice would be much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

挽梦忆笙歌 2024-12-29 17:10:05
def link_to_pjax(name, path, options)
  options[:class] += ' pjax'
  link_to(name, path, options)
end

编辑

经过测试,它不太优雅:

 def link_to_pjax(name, path, options = {})
   options[:class] ? options[:class] += ' pjax' : options[:class] = 'pjax'
   link_to(name, path, options)
 end

我的第一个解决方案有效,但前提是您仍然指定了一个类。

最新的适用于所有情况:

  • link_to_pjax 'click me', my_super_path, class: 'ahah', id: 'hello'
  • link_to_pjax 'click me', my_super_path

我的坏...

def link_to_pjax(name, path, options)
  options[:class] += ' pjax'
  link_to(name, path, options)
end

edit

After test, it's much less elegant:

 def link_to_pjax(name, path, options = {})
   options[:class] ? options[:class] += ' pjax' : options[:class] = 'pjax'
   link_to(name, path, options)
 end

My first solution works but only if you have still specified a class.

The latest works in all cases:

  • link_to_pjax 'click me', my_super_path, class: 'ahah', id: 'hello'
  • link_to_pjax 'click me', my_super_path
  • etc

My bad...

糖粟与秋泊 2024-12-29 17:10:05
def link_to_pjax(name, path, options={})
  default_options = { :class => "pjax" }
  link_to(name, path, options.merge(default_options))
end
def link_to_pjax(name, path, options={})
  default_options = { :class => "pjax" }
  link_to(name, path, options.merge(default_options))
end
梦幻的心爱 2024-12-29 17:10:05

我改进了 Delba 答案来处理 link_to 的块版本:

def link_to_pjax(*args, &block)
  if block_given?
    options      = args.first || {}
    html_options = args.second
    link_to_pjax(capture(&block), options, html_options)
  else
    name         = args[0]
    options      = args[1] || {}
    html_options = args[2] || {}
    html_options[:class] ? html_options[:class] += ' pjax' : html_options[:class] = 'pjax'
    link_to(name, options, html_options)
  end
end

I improved Delba answer to handle block version of link_to:

def link_to_pjax(*args, &block)
  if block_given?
    options      = args.first || {}
    html_options = args.second
    link_to_pjax(capture(&block), options, html_options)
  else
    name         = args[0]
    options      = args[1] || {}
    html_options = args[2] || {}
    html_options[:class] ? html_options[:class] += ' pjax' : html_options[:class] = 'pjax'
    link_to(name, options, html_options)
  end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文