我正在使用CodeIgniter开发Web应用程序。这一次,我把自定义js代码放在视图文件中做了很多花哨的东西。通过这样做,我可以使用CodeIgniter提供的site_url()
和base_url()
函数。
今天我想将所有自定义js代码从视图文件分离到外部js文件中。然后它击中了我,我不能在外部js文件中使用site_url()
和base_url()
。所以,我不得不将js代码移回视图文件。
我想问一下这类问题的意见,例子和最佳实践。您是将自定义js代码放在视图中还是在外部js文件中?如果你把它放在外部文件中,你如何解决site_url()
和base_url()
的需求(当然除了我想要避免的绝对网址)。
答案 0 :(得分:38)
我通常将我的文件保存在外部文件中,但在我的模板(视图)中放置一行,声明一个名为“baseurl”的javascript变量,以后可以由我的外部javascript使用。
<script type="text/javascript">
var baseurl = "<?php print base_url(); ?>";
</script>
<script type="text/javascript" src="/js/scripts.js"></script>
现在我的scripts.js文件可以通过自己的base_url()
变量访问baseurl
值。
答案 1 :(得分:3)
我会以不同的方式做到这一点 - 显然,js应该是外部的,但是为什么不充分利用这样一个事实,即你有一个非常适合处理所有javascript魔法的MVC框架?
以下是我对CI的Javscript(和CSS)善的处方:
抓住Minify的副本 - 如果你还不知道,你的生活会更好。不是在“一见钟情/我刚发现jQuery / xkcd / unit testing ”的方式,但至少在“ Dude,准备好的语句中根除SQL注入 “那种方式。
其次,创建一个封装Minify的CI控制器(不应该太难,只记得设置正确的HTTP头并传递参数)
可选择激活缓存以使所有内容都快速运行(Minify内置了缓存,但如果您已经缓存了CI内容,那么您也可以使用相同的方法。
可选择为Minify定义一些组,以使脚本加载更好
可选择将baseurl和siteurl变量(以及您可能需要的任何其他值)添加到javascript输出
而且,现在您应该可以通过调用Minify-wrapper来加载脚本:
<script type="text/javascript" src="/min/g=js"></script>
它疯狂快速,它只需要一个请求而不是很多,它可以让您完全控制脚本,甚至可以使您的源代码更清晰。
哦,如果你想对你的源代码偷窥访问者特别好,你可以自动添加这样的东西到输出:
// Javascript compressed using Minify by Ryan Grove and Steve Clay
// (http://code.google.com/p/minify/)
// Human-readable source files:
// http://www.yourdomain.com/js/core_functions.js
// http://www.yourdomain.com/js/interface.js
// http://www.yourdomain.com/js/newsticker.js
// http://www.yourdomain.com/js/more_magic.js
(...)
至少我就是这么做的。
答案 2 :(得分:0)
唐尼,如果你开始单独浏览每个网址,你就会给自己一个球疼。为什么不直接通过base_url()和contcat控制器/方法?
你失去了在index_page和url_suffix设置之间进行交换的能力,但他们不应该经常改变所有这些。