My97DatePicker日期控件自定义脚本日期在ThinkPHP5下面报错

2018-08-02 15:49:39 浏览数 (1)

最近一个项目又牵扯到日期限定的操作,在thinkPHP5下集成My97DatePicker过程中报了一个未定义变量:D的错误。一般性载入没问题,只有在自定义脚本日期上报错。很显然是冲突造成的。

问题场景复现。

使用My97DatePicker自定义脚本日期,做一个时间段的选择,起始时间为今日起,终止时间为未来某一天。两个日期选择框,对应两条规则,第一起始日期不能为过去的日期。第二起始日期不能大于终止日期。两条规则一限定就构成了一个选择范围。原本心想很简单,翻开My97DatePicker的demo,一顿拷贝,然后上述两条规则一定义,原本以为就这样完事了,如图:

页面一刷新,傻眼了,竟然报了一个未定义变量:D 的错误。

问题原因及查找。

第一反应未定义变量这是PHP的错误啊,博主写程序从来不会写单字母的变量的,所以问题肯定是刚刚的时间控件的问题。不过My97DatePicker是个纯js程序,哪来的PHP报错。于是就去查了下ErrorException(runtime目录下的temp目录中)。发现My97DatePicker中关于$dp.$D没有被正确编译,而是把D解析成了一个变量,看到这样的编译结果,顿时就明白了原因。如图:

很显然,因为ThinkPHP5的模版语法采用的是单花括号,而不是更常见的双花括号。TP5将$dp.$D解析成了变量,从而造成了这部分内容没有变My97DatePicker的js接管。

解决办法。

解决办法也很简单,如果仔细看过TP5的手册的话,在模版章节中关于变量输出中有这样一句话:{和$之间不能有任何空格,否则标签无效。

关于$dp.$D在My97DatePicker的demo中也给出了解释。

有了上面两个解释就好办了,只要使{$dp.$D}这个标签无效,就能达到目的,那么只需将#f{$dp.$D}中的{和$之前敲一个空格就妥了。最终效果如图:

再次刷新页面,就可以看到My97DatePicker空间被正常加载了,无任何错误。

0 人点赞