最近在使用Yii2.0框架开发,为了提高开发效率直接使用了一套Yii2.0的后台模板。调试js时,发现js里写的函数都找不到,仔细排查之后发现了问题在于Yii2框架代码块的问题。
Yii2的代码里js被包在一个Block里,如下所示:
1 | <script> |
这段代码的意思是把script标签中的js代码看成是一个以js_end为名的js文件,在页面中加载进来。那么为什么会报错js未定义呢?是registerJs函数的第二个参数起了作用,它决定了这段js代码的加载顺序。
registerJs的第二个参数可以是以下:
1 | POS_HEAD:head结束标签之前 |
原来是我们在页面加载完成之后才加载js,Block内的函数就成了window.onload里的函数,作用域在此局部,外部无法获取。因此我们需要将其放到全局作用域中。
我使用了比较简单粗暴的方法,直接将定义Block及注册js的语句删掉即可。
谢谢你长得这么好看,还这么耐心地看到这。