向库中添加回调函数

问题描述:

我正在使用color.js,并且我正在尝试向setColor添加回调函数。我下面的代码添加line #177前:向库中添加回调函数

if (_instance.options.setColorCallback) { 
    _instance.options.setColorCallback(convertColors(type, save ? colors : undefined)); 
} 

这工作得很好很好,但是当我尝试使用setColor使用Lab颜色格式问题。当我这样做时,回调函数不会执行。以下是我setColor如何使用Lab色彩空间:(Source

if (type === 'Lab') { 
    var factor = (e.clientX - startPoint.left)/currentTargetWidth; 
    factor = factor > 1 ? 1 : factor < 0 ? 0 : factor; 
    myColor.colors.Lab[mode] = (mode === 'L') ? factor * 100 : (factor * 255) - 128; 
    myColor.setColor(null, 'Lab'); 
} 

我如何添加一个回调函数来setColor

+0

你的意思是你在* 177行之后和178行之前添加了它* – Bergi

虽然这是一个不好的做法,修改这样的库,但如果你已经决定在线#177这样做,然后,而不是做这件事线#204,并更换

function convertColors(type, colorObj) { 

function convertColors(type, colorObj) { 

    var convertResult = __convertColors(type, colorObj); 

    if (_instance.options.afterColorsConvert) { 
     _instance.options.afterColorsConvert(convertResult); 
    } 

    return convertResult; 
} 

function __convertColors(type, colorObj) { 

这是因为setColor包装在第76行并且在setColor的两个代码定义中都使用了convertColors,所以它最好扩展convertColors功能。

+0

感谢您的回答!但我有2个问题。 1 - 为什么修改这样的库是不好的做法? 2 - 如果我这样做,每次我转换颜色时都会调用回调函数。我希望它只在我使用'setColor'时被调用。 – Horay

+0

这是一种不好的做法,因为如果发布了较新版本的库,则无法升级到该版本,除非您将现有版本中的所有修补程序都更新到新版本。其次,我查看了colors.js的源代码,并看到convertColors在库外部不可访问,并且只有setColors在内部使用此方法。 –

这个问题显然是解决了,我只是想多一些信息添加到它完成; O)

功能setColor()返回convertColors()至极确实有所谓convertCallback()一个回调函数,您可以使用,所以有没有必要在setColor()中创建自己的。

此外,如果您要在#177行之前添加一个回调,因为convertColors()还没有被调用,因此您会处理错误的颜色值。

顺便说一句:@Horay,我用演示更新了colorPicker(out评论)如何实现Lab滑块,如果你还有兴趣的话。