加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 要扩展rails’`link_to`,我应该使用`alias_met

发布时间:2020-12-17 02:37:35 所属栏目:百科 来源:网络整理
导读:我正在使用 twitter bootstrap创建一个应用程序.我使用 Font Awesome将图标添加到各个地方,通常是链接.到目前为止,我一直在使用全球帮手.这是简化版本: # app/helpers/link_to_with_icon.rbdef link_to_with_icon(text,path,options={}) options = options.
我正在使用 twitter bootstrap创建一个应用程序.我使用 Font Awesome将图标添加到各个地方,通常是链接.到目前为止,我一直在使用全球帮手.这是简化版本:

# app/helpers/link_to_with_icon.rb
def link_to_with_icon(text,path,options={})
  options = options.clone
  icon = options.delete(:icon)
  text = "<i class='#{icon}'></i> #{text}" if icon.present?
  link_to(text,options)
end

这很有用,但每次我需要将一个图标添加到一个新链接时,我必须记住将link_to更改为link_to_with_icon(该应用程序是新的,因此有点不断变化).所以我决定完全停止使用link_to,并将其替换为link_to_with_icon(因为它兼容).

但后来我意识到,由于我不再使用link_to,我不妨在第一时间修改link_to.当然,我可以在lib文件夹中添加一些monkeypatching,使其理解:icon选项.

# lib/extensions/url_helper_extensions.rb
module ActionView
  module Helpers
    module UrlHelper

      # do some magic here

    end
  end
end

几年前,我做过类似的事情.在那个时候,alias_method_chain助手是这项工作的正确工具.在rails 3.x中它似乎是deprecated in favor of modules and inheritance.

但是,如果我正确理解该页面中的示例,我需要某种Base模块提供link_to方法 – 否则您无法为其添加“Pre-Extension”.

因此我的问题是:我可以使用模块扩展link_to吗?或者我必须使用alias_method_chain吗?

特别是,非常感谢:icon选项的工作实现.

解决方法

我只是这样做:

# app/helpers/my_helper.rb

module MyHelper
  def link_to(text,options={})
    options = options.clone
    icon = options.delete(:icon)
    text = "<i class='#{icon}'></i> #{text}" if icon.present?
    super(text,options)
  end
end

但要注意你是否使用了link_to和block.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读