我想在没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sass gem,所以我认为背负就像这样简单:
class Rectangle
include Sass::Script::Functions
def color
Sass::Script::Color.new([0x82, 0x39, 0x06])
end
def render
#haml engine executed with context of self
#so that within temlate i could call
# %stop{offset: '0%', stop: {color: lighten(color)}}
end
end
更新:请参阅上面的#render
,我想在lighten(color)
实例的上下文中呈现的haml模板中调用Rectangle
但我得到一个未定义的方法assert_type
错误。 assert_type
方法在Sass::Script::Functions::EvaluationContext
类中定义。 (github file)
在irb
玩游戏,只是为了得到一些接近我想要的东西:
require 'sass'
eval_context = Sass::Script::Functions::EvaluationContext.new({})
#yes the Sass::Script::Number.new(10) is requried, a simple 10 will not work
color = eval_context.rgb(Sass::Script::Number.new(10), Sass::Script::Number.new(10), Sass::Script::Number.new(10))
eval_context.lighten(color, Sass::Script::Number.new(10))
这很疯狂 - 我错过了什么吗?
答案 0 :(得分:5)
Sass :: Script :: Parser.parse(' lighten(#333,10)',0,0).perform(Sass :: Environment.new)
答案 1 :(得分:3)
<强>更新强>
现在我更了解你的问题,为什么不重写功能呢。
require 'sass'
class Rectangle
include Sass::Script
def color
@color ||= Sass::Script::Color.new([0x82, 0x39, 0x06])
end
def lighten(ammount)
hsl = color.hsl.dup
hsl[2] += ammount
@color = Sass::Script::Color.new(hue: hsl[0], saturation: hsl[1], lightness: [2])
end
end
rec = Rectangle.new
rec.lighten(20)
旧答案
你并不疯狂,你只是把错误的一部分包括在内。
此代码按预期运行。请注意,我从include中删除了::Functions
。
require 'sass'
class Rectangle
include Sass::Script
def color
color = Sass::Script::Color.new([0x82, 0x39, 0x06])
puts color.class
end
end
rec = Rectangle.new
rec.color