CakePHP:组织JavaScript的正确方法

时间:2013-10-11 20:01:48

标签: javascript cakephp cakephp-2.3

我正在构建一个CakePHP应用程序。代码的逻辑结构使每个控制器都被认为是它自己的迷你应用程序。

我正在使用jQuery来实现我的所有JavaScript功能。

我的问题是:构建JavaScript的正确方法是什么,只有需要它的页面才能拥有它?

我应该为每个应用分配单独的js文件。这样,App 1将app1.js包含在其所有视图中,App 2将只有app2.js等等。然后我可以拥有一个具有所有常规功能的main.js,并且它包含在所有页面中。

注意:我不想使用JsHelper而且我不想编写JS inline。

1 个答案:

答案 0 :(得分:1)

我建议你看一下这个奇妙的家伙写的这个Autoload Plugin ......哎呀,由我:)。

因此,使用它可以轻松地将您的javascript甚至CSS拆分为单独的目录,并且每个控制器上都会包含单独的文件。

如果您想要关注趋势 - 请使用RequireJS,这样您就可以模块化您的代码并仅包含您需要的那些部分。

虽然Autoload是我的创作,但我转而使用RequireJS,我对结果非常满意。

我将用RequireJS解释我的方法。

您需要的是布局头部的以下代码:

<script>
    <?php if(is_file(
      __DIR__.'/../../webroot/js/action/'.
      $this->request->params['controller'].'/'.
      $this->request->params['action'].'.js'
    )){ ?>
   var rPath = root+'js/app/action/<?php echo 
                $this->request->params['controller'].'/'.
                $this->request->params['action']; ?>';
    <?php } ?>
</script>

在布局的底部,您需要包含requirejs文件:

<script 
    data-main="<?php echo $this->Html->url('/'); ?>js/app" 
    src="<?php echo $this->Html->url('/'); ?>js/libs/requirejs.js">
</script>

第一部分只是检查该文件夹中是否存在该特定控制器和操作的文件:

/wwwroot/js/actions/Posts/write.js

如果是这样,添加一个包含对该文件的引用的var rPath。

以下是我正在使用的RequireJS配置文件的示例:

require.config({
    baseUrl: root+'js/',
    paths: {
        jquery         : 'libs/jquery.min',
        //...your convenient shortcuts
    }
});

//That's where the magic happen
if(typeof(rPath) !== 'undefined'){
    requirejs([rPath]);
}

最后,如果你需要在你的控制器帖子和你的动作写一些javascript,你需要创建一个文件: /wwwroot/js/app/Posts/write.js,内容如下:

define([
    'jquery', //reference to jquery 
    'app/Posts/controller' //module which you wrote for controller specific functions.
    //other libs or modules if needed.
], function($){
     //your functions for wirite action
});

有关详细信息,请查看RequireJS文档。

希望有所帮助。