我想在没有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,我想从在Rectangle实例的上下文中呈现的haml模板中调用lighten(color)
但我得到一个未定义的方法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))
这很疯狂 – 我错过了什么吗?
解决方法
更新
现在我更好地理解了你的问题,为什么不重写功能.
require 'sass' class Rectangle include Sass::Script def color @color ||= Sass::Script::Color.new([0x82,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,0x06]) puts color.class end end rec = Rectangle.new rec.color
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。