脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-在YII中使用RequireJS,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 RequireJS 是一个非常小巧的 JavaScript 模块载入框架,是 amD 规范最好的实现者之一。而YII则是目前最热门的PHP MVC框架了,下面主要分享如何在YII中使用RequireJS
使用registerScriptFile 引入RequireJS
在action代码里通过registerScriptFile加载所有的JS代码,代码如下:
//deploy js directory of require modules and return a reference to location
$js = Yii::app()->assetManager->publish(
Yii::getPathOfAlias('application.components.js.requireModules')
);
//加载其它代码
Yii::app()->clientScript->registerScript( 'requiredScript', 'require.config({
baseUrl: "' . $js . '",
waitSeconds: 15
});
require( ["module1","module2"],
function() {
//start doing things once modules have loaded
}
);', CClientScript::POS_END );
以上的代码还可以进一步优化,那就是将配置代码放到一下公共的JS文件里,然后载入该公共文件,这种方法不好的地方是似乎没有办法使用RequireJS 的data-main属性。
在模板文件里载入RequireJS
YII中的Views模板文件其实就是一个HTML文件,所以我们就可以像在普通HTML文件里一样使用RequireJS。
<script data-main="scripts/main" src="scripts/require.js"></script>
如果要在RequireJS里引入非AMD的模块,如underscore, jQuery 插件等,则需要用到RequireJS的shim配置,而通过Shim进行配置的模块在所有的调用之前进行配置,所以我们通过将RequireJS的配置代码放在main.js中。但是通常每个页面都有自己的代码要执行,所以我们在data-main边上加个非标准的属性data-start,它的值就是当前页面里需要执行的模块。
<script data-main="scripts/main"data-start="scripts/page1,scripts/common" src="scripts/require.js"></script>
然后我们在main.js里遍历该属性,取得模块列表,分别用require方法载入进来。例如我们项目里的每个模块都有个inIT方法,所以我们就遍历调用所有模块的init方法。
这里再强调一下:data-start是我们自定义的属性,用来表示该页面需要初始化的模块,你可以使用任何名称。它的值是一个字符串,多个模块使用逗号隔开,然后在代码中把它解析成一个数组。
// load module for each page
VAR startModules = $("script[data-main][data-start]").attr("data-start").split(',');
_.each(startModules, function (module) {
require([module], function(moduleObj) {
if (moduleObj && moduleObj.init) {
moduleObj.init();
}
});
});
下面是完整的main.js里代码示例:
requirejs.config({
"baseUrl": "js/lib",
"paths": {
"app": "../app"
},
"shim": {
"jquery.alpha": ["jquery"],
"jquery.beta": ["jquery"]
}
});
// load module for each page
var startModules = $("script[data-main][data-start]").attr("data-start").split(',');
_.each(startModules, function (module) {
require([module], function(moduleObj) {
if (moduleObj && moduleObj.init) {
moduleObj.init();
}
});
});
觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!
以上是脚本宝典为你收集整理的javascript代码实例教程-在YII中使用RequireJS全部内容,希望文章能够帮你解决javascript代码实例教程-在YII中使用RequireJS所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。