BTStream's Blog

True or False

jQuery Validation Engine的表单验证与字段ajax验证

jQuery Validation Engine是一个很不错的jQuery表单验证插件。最近在使用的时候遇到一个问题,就是jQuery Validation Engine所提供的'validate' action 不会触发ajaxFormValidation。在jQuery Validation Engine的官方文档中提到

Validates the form and displays prompts accordingly. Returns true if the form validates, false if it contains errors. Note that if you use an ajax form validator, the actual result will be delivered asynchronously to the function options.onAjaxFormComplete.

但是实际上,使用'validate' action是不会触发ajaxFormValidation事件的。例如,假定存在一个form如下

<form action="validation_url">
<input id="test_input" class="validate[required, ajax[someAjax]]" type="text" name="test" />
</form>

那么,通过如下代码:

$('form').validationEngine('validate');

触发验证的话,只会触发input[id=test_input]的字段验证,不会进行ajaxFormValidation验证,即使是进行了如下绑定

$('form').validationEngine({
    ajaxFormValidation: true,
    onAjaxFormComplete : function(){
        //function body
    }
});

onAjaxFormComplete事件也不会获得相应。

通过chrome的“审查元素”中的network可以看到,当手动调用$('form').validationEngine('validate')时,页面不会向validation_url提交数据,而validation_url是默认进行表单验证的地址。

实践证明,要想进行表单ajax验证,必须在form中增加一个type为submit的input元素,即:

<form action="validation_url">
<input id="test_input" type="text" class="validate[required, ajax[someAjax]]" name="test" />
<input id="test_input" class="validate[required, ajax[someAjax]]" name="test" type="submit" />
</form>

然后点击submit才会触发ajaxFormValidation,然后通过onAjaxFormComplete的响应函数进行表单验证的结果响应。

当然,目前还不清楚这是不是v2.5的bug。

SQLite3的参照完整性约束

SQLite3支持参照完整性约束,可以通过REFERENCES来进行声明,但是有几点问题需要特别注意。

1、目前版本的SQLite3在默认情况下并未开启Foreign Key的支持,参照完整性约束需要手动打开。

打开参照完整性约束的语句为:

PRAGMA foreign_keys = ON

上述语句可以在编程环境中调用,例如,在PHP中,使用PDO情况下,可以采用如下方法开启Foreign Key,其他语言可以采用类似方式执行。

$con = new PDO("sqlite:/path/to/sqlite3.file");
$con->exec(" PRAGMA foreign_keys = ON");

2、在使用Foreign Key时,parent key必须为primary key或者具备unique属性。

例如,有如下一张表:

CREATE TABLE tbl_test
(
    id INTEGER PRIMARY KEY,
    ref_id INTEGER REFERENCES parent_table(parent_key)
)

其中,ref_id属性参照parent_table表中的parent_key字段,那么parent_key字段必须为parent_table的主键或者具备unique属性。如果该条件不能满足,任何对tbl_test表的insert和update操作都会报:

foreign key mismatch

错误

更改Mendeley Desktop数据文件夹的位置

Mendeley Desktop的默认数据文件夹位置为C:\user\用户名\AppData\local\Mende Ltd\Mendeley Desktop\。这样的话,重装系统的时候十分不方便。可以通过修改注册表的方法修改Mendeley Desktop的默认数据文件夹位置。具体修改方法为:

在注册表HKEY_CURRENT_USER/Software/Mendeley Ltd/Mendeley Desktop中新建名称为dataDirectory的字符串,将其值设置为希望保留Mendeley Desktop数据的文件夹即可。

解决Matlab图片导出为eps格式的字体嵌入问题

最近正直论文提交的高峰,edas的论文格式检查需要生成的pdf文件中的所有字体均为嵌入式字体。但是Matlab默认导出的eps格式的图片字体使用的是Helvetica字体,直接插入到TeX源文件中生成pdf后,极易产生字体不为嵌入式的问题。经过查阅资料和自行摸索,终于找到一个比较完美的解决方案。现整理如下。

1、需要的工具

解决方案需要的工具如下:

Ghostscript: http://www.ghostscript.com

Xpdf: http://www.foolabs.com/xpdf

export_fig: http://www.mathworks.com/matlabcentral/fileexchange/23629-exportfig

可选工具:

Format Tick Labels (Extended): http://www.mathworks.com/matlabcentral/fileexchange/23841-format-tick-labels-extended

2、安装工具,配置环境

1)、安装Ghostscript和Xpdf,并设置到系统的环境变量。

设置系统的环境变量根据具体系统不同而不同。Linuxer就不多说了,相信广大的Linuxer有能力自己设置正确环境变量,且Linux平台安装上述程序之后一般会安装到默认的PATH路径中。Windows平台下的环境变量设置需要把包含上述程序的可执行文件的文件夹路径加入到Windows的环境变量中的path变量中,如有问题请自行Google之。

2)、安装export_fig toolbox。

安装方法为直接解压缩到一个文件夹,将该文件夹加入到Matlab的加载路径中。

3、使用

1)、打开需要转换的图片

2)、将图片的背景设为透明,可以使用下列代码完成:

set(gca,'color','none');

3)、使用export_fig命令将图片导出为eps格式

export_fig 'filename' -eps

将其中的'filename'字段转换为所需要的文件名,可以包含路径信息

结果如图所示:

4、调整

从上图来看,虽然可以看出字体都已经嵌入到其中了,但是图片字体不是很让人满意。为此,可以进行一些调整

1)、更改字体

使用下列命令更改字体设置:

set(gca, 'fontname', 'Times New Roman')%更改gca的字体,涉及到的部分包括legend、xtick和ytick的刻度值,最后一个参数为字体,Times New Roman作为一款常用的字体,我个人还是很喜欢的。可以选择其他的字体
set(get(gca, 'xlabel'), 'fontname', 'Times New Roman')%更改xlabel字体
set(get(gca, 'ylabel'), 'fontname', 'Times New Roman')%更改ylabel字体

更改字体后的结果如下:

可以看到,效果已经好了不少。如果现在的结果已经可以满足要求了的话,至此可以完全告一段落。但是matlab的强大是不会让我们满足的,我们要在matlab的图片中实现LaTeX效果。

2)、实现完全LaTeX效果

使用LaTeX方式渲染文字。主要是把文字对象的interpreter属性值修改为latex。具体为在使用legend函数或者是xlabel,ylabel函数之前,将默认的渲染函数利用下列命令改为latex方式:

 

set(0, 'defaulttextinterpreter', 'latex');