CodeIgniter中的jQuery,在视图内部还是在外部js文件中?

时间:2010-02-25 04:59:26

标签: php javascript jquery codeigniter

我正在使用CodeIgniter开发Web应用程序。这一次,我把自定义js代码放在视图文件中做了很多花哨的东西。通过这样做,我可以使用CodeIgniter提供的site_url()base_url()函数。

今天我想将所有自定义js代码从视图文件分离到外部js文件中。然后它击中了我,我不能在外部js文件中使用site_url()base_url()。所以,我不得不将js代码移回视图文件。

我想问一下这类问题的意见,例子和最佳实践。您是将自定义js代码放在视图中还是在外部js文件中?如果你把它放在外部文件中,你如何解决site_url()base_url()的需求(当然除了我想要避免的绝对网址)。

3 个答案:

答案 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)善的处方:

  1. 抓住Minify的副本 - 如果你还不知道,你的生活会更好。不是在“一见钟情/我刚发现jQuery / xkcd / unit testing ”的方式,但至少在“ Dude,准备好的语句中根除SQL注入 “那种方式。

  2. 其次,创建一个封装Minify的CI控制器(不应该太难,只记得设置正确的HTTP头并传递参数)

  3. 可选择激活缓存以使所有内容都快速运行(Minify内置了缓存,但如果您已经缓存了CI内容,那么您也可以使用相同的方法。

  4. 可选择为Minify定义一些组,以使脚本加载更好

  5. 可选择将baseurl和siteurl变量(以及您可能需要的任何其他值)添加到javascript输出

  6. 而且,现在您应该可以通过调用Minify-wrapper来加载脚本:

    <script type="text/javascript" src="/min/g=js"></script>

  7. 它疯狂快速,它只需要一个请求而不是很多,它可以让您完全控制脚本,甚至可以使您的源代码更清晰。


    哦,如果你想对你的源代码偷窥访问者特别好,你可以自动添加这样的东西到输出:

    // 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设置之间进行交换的能力,但他们不应该经常改变所有这些。