【SPA】单页Web应用(二)

一、前言

第二次在优快云写博客。

在这里,接着《【SPA】单页Web应用(一)》继续。


只是对《单页Web应用:JavaScript从前端到后端》笔记整理。

【高手勿喷,菜鸟整理不易。】


二、正文


书目:
        《单页Web应用:JavaScript从前端到后端》
    原书:《Single Page Web Applications》 
                [著] Michael S. Mikowski
                       Josh C. Powell
                [译]包勇明

本书的第二章是讲述JavaScript基础,这里不是重点。


第三章 开发Shell


Shell是架构的必需组件。


先开发包含功能容器的页面布局,
然后让Shell来渲染它们。



演示如何管理功能容器:展开和收起聊天滑块。
然后让它来捕获用户打开和关闭聊天滑块的点击事件。
最后,使用URI锚作为状态API,使用的是锚接口模式。


本章将会完成构建可扩展和可维护的单页应用的基础。




理解Shell


    Shell是单页应用的主控制器,是必需的。
        Shell模块是单页应用的形状和结构。
        Shell只是架构的一部分,是我们从很多商业项目中提炼出来的。


    编写Shell模块是有好处的,因为它是架构的中枢。
        它是功能模块和业务逻辑以及通用浏览器接口之间的协调者。
        (当用户点击了后退按钮、登录或者做了其他事情而改变了应用状态,
        这些状态可以使用书签来标记,Shell会协调这些改变)


单页应用架构中的Shell 



Shell负责以下事情:
    渲染和管理功能容器(本章)
    管理应用状态(本章)
    协调功能模块


建立目录结构:
 
    spa 
     +---------css
     |          +-------spa.css 
     |          `-------spa.shell.css
     +---------js
     |          +----jq 
     |          |     +-----jquery-1.9.1.js 
     |          |     `-----jquery.uriAnchor-1.1.3.js
     |          +----spa.js
     |          `----spa.shell.js
     +----------layout.html
     `----------spa.html




HTML文件  spa/spa.html

 <!--
    注意:为什么不和传统网页一样,把脚本文件放到body容器的最后面?
    传统网页,这么做时页面渲染更快,
    单页应用,由于需要JS生成HTML代码,因此将脚本放置头部之外,并不能更快地渲染页面。
    相反,我们把所有的外部脚本放置head区域中,以便改进组织结构和易读性。
    -->
    <!DOCTYPE html>
    <html>
        <head>
            <title>SPA Starter</title>
            <script src=""></script>
            <link rel="stylesheet" href="css/spa.css" type="text/css"/>
            <link rel="stylesheet" href="css/spa.shell.css" type="text/css"/>

            <script src="js/jq/jquery-3.2.0.min.js"></script>
            <script src="js/jq/jquery.uriAnchor.js"></script>

            <script src="js/spa.js"></script>
            <script src="js/spa.shell.js"></script>
            <script>
                $(function(){spa.initModule($('#spa'));});    //当DOM加载完成后,执行其中的函数
            </script>
        </head>
        <body>
            <div id="spa"></div>
        </body>
    </html>


创建CSS根名字空间


CSS根名字空间是spa,其目录是spa/css/spa.css


 /*
        *spa.css
        *Root namespace styles
        */

        /** Begin reset */
        *{
            margin:0;
            padding:0;
            -webkit-box-sizing:border-box;
            -moz-box-sizing:border-box;
            box-sizing:border-box;
        }
        h1,h2,h3,h4,h5,h6,p{margin-bottom:10px;}
        ol,ul,dl{
            list-style-position:inside;
        }

        /** End reset */


        /** Begin standard selectors */
        body{
            font : 13px 'Trebuchet MS', Verdana, Helvetica,Arial,sans-serif;
            color:#444;
            background-color: #888;
        }
        a{
            text-decoration:none;
        }
        a:link,a:visited{color:inherit;}
        a:hover{text-decoration: underline}

        strong{
            font-weight:800;
            color:#000;
        }
        /** End standard seletors */

        /** Begin spa namespace selectors*/
        #spa{
            position:absolute;
            top:8px;
            left:8px;
            bottom:8px;
            right:8px;

            min-height: 500px;
            min-width: 500px;
            overflow: hidden;

            background-color: #fff;
            border-radius: 0 8px 0 8px;
        }
        /** End spa namespace selectors*/

        /** Begin utility selectors*/

        .spa-x-select{ /**/ }
        .spa-x-clearfloat{
            height:0!important;
            float: none!important;
            visibility: hidden!important;
            clear:both!important;
        }

        /** End utility selectors*/


创建JavaScript根名字空间


        根名字空间是spa,其目录是spa/js/spa.js


/*
        *spa.js
        * Root namespace module
        */

        /*jslint settings    browser : true, continue : true,
            devel : true, indent : 2, maxerr : 50,
            newcap : true, nomen : true, plusplus : true,
            regexp : true, sloppy : true, vars : true,
            white : true
        */

        /*global $,spa */

        var spa=(function(){
         var initModule=function($container){
                $container.html(
                    '<h1 style="display:inline-block;margin:25px">'
                    +'hello world!'
                    +'</h1>'
                );
            };
           /* var initModule=function($container){
            spa.shell.initModule($container);
            };
            */
            return {initModule:initModule};
        }());

运行结果:


    Hello World页面




至此,目录中的已填充内容的文件有:




执行顺序为:
            spa.css  ------------>    
            spa.js (其中有spa.initModule方法)   --------------->   
            渲染<div id="spa"></div> -------------> 
            执行spa.initModule($('#spa'));  (此时,DOM加载完成)---------------->
            显示最终结果。 
            
 
 spa/spa.html中的 
            $(function(){spa.initModule($('#spa'));}); //DOM加载完成后执行

             <body>
                    <div id="spa"></div>
            </body>
的结构改变为:
             <body>
                    <div id="spa">
                            <h1 style="display:inline-block;margin:25px">hello world!</h1>
                    </div>
            </body>


(待续。。。)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值