3.1 atm与后台语言协同工作方案
先以登陆页来分析
// ~/blog/user/account/1.0.0 文件夹产出的地图文件, 1.0.0/exports下的入口文件的依赖都生成到了maps里面 { "settings": { "port": 1234, "debugParam": "debugId", "domain": "http://cn-style.gcimg.net/static" }, "maps": { "user/account/1.0.0:help.css": { "css": [ "/core/reset/1.0.0/reset.css", "/user/account/1.0.0/account.css", "/user/account/1.0.0/exports/help.css" ], "loader": "", "js": [], "onlyCss": true }, "user/account/1.0.0:login": { "css": [ "/core/reset/1.0.0/reset.css", "/user/account/1.0.0/account.css", "/user/account/1.0.0/css/login.css" ], "loader": "/lib/loader/1.0.0/loader.js", "js": [ "/user/account/1.0.0/account.js", "/user/account/1.0.0/exports/login.js" ], "onlyCss": false, "config": "*******" }, "user/account/1.0.0:reg": { "css": [ "/core/reset/1.0.0/reset.css", "/user/account/1.0.0/account.css", "/user/account/1.0.0/css/reg.css" ], "loader": "/lib/loader/1.0.0/loader.js", "js": [ "/user/account/1.0.0/account.js", "/user/account/1.0.0/exports/reg.js" ], "onlyCss": false } } }
登陆页入口脚本id:user/account/1.0.0:login
那么登陆页的依赖信息就要从maps['user/account/1.0.0:login']去获取,暂且用deps表示
1. deps.css字段
表示的是登陆页需要的全部的css文件,每个css文件的实际访问地址为 settings字段里面的domain连接上数组里面的每个css的uri
<link type="text/css" rel="stylesheet" href="http://cn-style.gcimg.net/static/core/reset/1.0.0/reset.css" /> <link type="text/css" rel="stylesheet" href="http://cn-style.gcimg.net/static/user/account/1.0.0/account.css" /> <link type="text/css" rel="stylesheet" href="http://cn-style.gcimg.net/static/user/account/1.0.0/css/login.css" />
2. deps.loader字段
因为atm只支持模块化开发,因此需要先加载模块解析器文件,deps.loader字段存放的就是模块解析器文件的uri
因此在加载其他模块化js脚本之前应最先加载改脚步,地址规则同样是 settings字段里面的domain连接上模块解析器的uri
<script id="atmjsnode" data-base="http://cn-style.gcimg.net/static" type="text/javascript" src="http://cn-style.gcimg.net/static/lib/loader/1.0.0/loader.js"></script>
注意上面的id是固定值,data-base的值要替换成settings里面的domain字段的值
3. deps.config字段
因为牵扯到异步的id与路径的一些映射等,所以需要该字段,不过后台语言对该字段的处理比较简单,直接用一个script标签包起来放到 模块解析器脚本后面即可
<script id="atmjsnode" data-base="http://cn-style.gcimg.net/static" type="text/javascript" src="http://cn-style.gcimg.net/static/lib/loader/1.0.0/loader.js" data-config='*******'></script>
4. deps.js字段
登陆页需要的除模块解析器之外的所有js文件,每个js文件的实际访问呢地址为settings字段里面的domain连接上数组里面的每个js的uri
<script type="text/javascript" src="http://cn-style.gcimg.net/static/user/account/1.0.0/account.js"></script> <script type="text/javascript" src="http://cn-style.gcimg.net/static/user/account/1.0.0/exports/login.js"></script>
5. deps.onlyCss
像上面json文件里面的 user/account:1.0.0/help.css (一个简单的帮助页面),只需要一个css,不需要js,所以用css文件作为了入口文件
也就是说,如果入口文件是css文件,则该字段的值为true
如果入口文件是js文件,则该字段为false
如果该字段值为true,则上面的deps.loader,deps.map,deps.js都不能输出。
6.如果入口文件为js,需要在最后渲染入口文件的调用,如果入口文件为css文件(即 deps.onlyCss为true)则不需要输出下面这段代码
<script type="text/javascript">atmjs.use('user/account:1.0.0/login')</script>
综上:最终的产出代码为:
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>登陆页</title> <link type="text/css" rel="stylesheet" href="http://cn-style.gcimg.net/static/core/reset/1.0.0/reset.css" /> <link type="text/css" rel="stylesheet" href="http://cn-style.gcimg.net/static/user/account/1.0.0/account.css" /> <link type="text/css" rel="stylesheet" href="http://cn-style.gcimg.net/static/user/account/1.0.0/css/login.css" /> </head> <body> <!--登陆页相关html代码--> <script id="atmjsnode" data-base="http://cn-style.gcimg.net/static" type="text/javascript" src="http://cn-style.gcimg.net/static/lib/loader/1.0.0/loader.js" data-config='*******'></script> <script type="text/javascript" src="http://cn-style.gcimg.net/static/user/account/1.0.0/account.js"></script> <script type="text/javascript" src="http://cn-style.gcimg.net/static/user/account/1.0.0/exports/login.js"></script> <script type="text/javascript">atmjs.use('user/account:1.0.0/login')</script> </body> </html>
那么还有一个问题,有时候页面需要这样的代码:
atmjs.use('user/account:1.0.0/login', function (loginExports) { loginExports("php动态生成的一些参数"); });
因此,后台要实现该功能