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动态生成的一些参数");
});

因此,后台要实现该功能

posted @ 2015-07-16 15:24  zxscj  阅读(243)  评论(0编辑  收藏  举报