我正在为包含JQuery助手的Rails创建一个Gem,我希望在我看来做这样的事情:
JQueryCheats::HoverImage.mouseoverimage("image1.jpg","image2.jpg")
我有以下几点设置:
module JQueryCheats
class HoverImage
#class used to do a quick Hover image
attr_accessor :image_tag
def initialize()
end
def mouseoverimage(initimage,hoverimage)
@image_tag =""
@image_tag = "<img src=\"#{initimage}\" alt=\"image\" onmouseover=\"$(this).attr('src','#{hoverimage}')\" onmouseout=\"$(this).attr('src','#{initimage}')\">"
return @image_tag
end
end
end
但这不起作用,我真的很擅长制作宝石并可以使用一些帮助
答案 0 :(得分:3)
听起来像是想要class method。
您可以使用self关键字执行此操作。
module JQueryCheats
class HoverImage
attr_accessor :image_tag
def initialize()
end
def self.mouseoverimage(initimage,hoverimage) #Note the self
@image_tag =""
@image_tag = "<img src=\"#{initimage}\" alt=\"image\" onmouseover=\"$(this).attr('src','#{hoverimage}')\" onmouseout=\"$(this).attr('src','#{initimage}')\">"
return @image_tag
end
end
end
为了定义多个这些方法,我会使用 class&lt;&lt; @Travis提到的自我方法,而不是将self置于所有方法之前。两者都执行相同的任务。
class << self
def mouseoverimage(initimage, hoverimage)
end
end
为了完整性,在定义之前还有另一种使用类名的方法,但是使用它会使重构更加困难,因为如果重命名类,必须在多个位置更改它。
def HoverImage.mouseoverimage(initimage,hoverimage)
答案 1 :(得分:1)
当我查看mini_magick gem时,我注意到他们的代码中包含了class << self
并且在方法中包含了class << self
,所以我在attr_accessor之后尝试了,我将这两个方法包装在module JQueryCheats
class HoverImage
#class used to do a quick Hover image
attr_accessor :image_tag
class << self
def mouseoverimage(initimage,hoverimage)
@image_tag =""
@image_tag = "<img src=\"#{initimage}\" alt=\"image\" onmouseover=\"$(this).attr('src','#{hoverimage}')\" onmouseout=\"$(this).attr('src','#{initimage}')\">"
return @image_tag.html_safe
end
def initialize()
end
end#end self
end
end
中,一切都工作为预期
现在代码是:
{{1}}