`
nbkangta
  • 浏览: 424186 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

JavaScript代码布局 Applocation Layout

阅读更多
原文出处:http://www.extjs.com.tw/?p=12#more-12 原文作者:Ext Js 正體中文站 原文是在一个繁体网站上,觉得这篇文章对于规模稍大点的Js程序还是挺有帮助的,算是翻译吧...:)        所谓的Application Layout就是你在写程序的时候,如何决定你程序代码的风格,让他具备相当的易读性。这样做的好处,依赖是在团队里面如果程序代码风格固定,别人要接手或者维护会比较容易。二来如果以后你要修改程序,也比较容易。以我来说,由于每天开发实在很大,一周前写的程序自己都觉得很陌生,好啦,废话不多说,进入正题! 我们来看看JS建类的两种方法: 方法一:
var MyObject = function() {

        /* Your Code Here */

};
方法二:
var MyObject = function() {

    return {

    /* Your Code Here */

    }

}();//注意最后的(),在IE浏览器中不加会出错
        今天我们介绍的Application Layout是许多Javascript设计师常用的架构,当然每个人都有自己的偏好。不过我观察到一种趋势,今天介绍的架构是最受欢迎的。
MyObject = function() {



    // private variables : 私有属性或称为局部变量



    // private functions : 私有方法或称为局部方法

    

    // public space



    return {

        // public properties, e.g. strings to translate : 公有属性或称为公有变量



        // public methods : 公有方法或称为公开方法

        

        init : function() {

            alert('Application successfully initialized');

        }

    };

}(); // 
上面的架构已经把private 和 public 的位置规划出來了,所以如果把代码都放到正确的位置上,大致的架构应该如下:
MyObject = function() {

    var myFirstName = 'Jack';

    var myLastName = 'Slocum'; // sorry jack : )



    function getFirstName() {

        alert(myFirstName);

    }



    function getLastName() {

        alert(myLastName);

    }



    return {

        NickName : 'Super Jack',

        NickName : 'Good Futher Jack',



        init : function() {

            alert(thisNickName); // 在Public zone里面的需要使用thisxxxx来存取变量

            alert(myFirstName); // 在Public zone里面的直接使用 xxx來存取 private zone里面的变量

        },



        other : function() {

            alert(thisNickName); // 在Public zone里面的需要使用thisxxxx来存取变量

            alert(myLastName); // 在Public zone里面的直接使用 xxx来存取 private zone里面的变量

        }

    };

}(); //   
有几点重点要提供给新手注意,这也是我刚学习Javascipt会遇到的疑惑或困扰。 第一个是变量的声明方式。 在Private zone的变量使用分好(;)隔开,举例如下:
var variable1;

var variable2;
但是在Public zone里面的变量要使用逗号(,)隔开(注:其实这是JSON写法的变型)举例如下:
variable1 : value1,

variable2 : value2
第二个是方法的声明方式。 在Private zone的方法声明方式如下:
function fun() {

    /* Your code HERE */

};

function fun() {

    /* Your code HERE */

};
带式在Public zone 的声明方法如下:
fun1: function() {

     /*Your code HERE*/

},

fun2: function() {

     /*Your code HERE*/

}
最后改写一个Ext Ajax读取Xml的示例,原始代码是在Ext.onReady()中处理全部工作,如下:
/*

 * Ext JS Library 1.1.1 Copyright(c) 2006-2007, Ext JS, LLC. licensing@extjs.com

 *

 * http://www.extjs.com/license

 */



Ext.onReady(function() {

    // create the Data Store

    var ds = new Ext.data.Store({

        // load using HTTP

        proxy : new Ext.data.HttpProxy({

            url : 'sheldon.xml'

        }),

        // the return will be XML, so lets set up a reader

        reader : new Ext.data.XmlReader({

            // records will have an "Item" tag

            record : 'Item',

            id : 'ASIN',

            totalRecords : '@total'

        }, [

                // set up the fields mapping into the xml doc

                // The first needs mapping, the others are very basic

                {

                    name : 'Author',

                    mapping : 'ItemAttributes > Author'

                }, 'Title', 'Manufacturer', 'ProductGroup'])

    });



    var cm = new Ext.grid.ColumnModel([{

        header : "Author",

        width : 120,

        dataIndex : 'Author'

    }, {

        header : "Title",

        width : 180,

        dataIndex : 'Title'

    }, {

        header : "Manufacturer",

        width : 115,

        dataIndex : 'Manufacturer'

    }, {

        header : "Product Group",

        width : 100,

        dataIndex : 'ProductGroup'

    }]);



    cm.defaultSortable = true;



    // create the grid

    var grid = new Ext.grid.Grid('example-grid', {

        ds : ds,

        cm : cm

    });

    grid.render();

    ds.load();

});
现在把这段代码改写如下:
var MyGrid = function() {

    var sm;

    var ds;

    var cm;

    var grid;

    /**

     * 初始化 sm: RowSelectionModel

     */

    function bulide_sm() {

        sm = new Ext.grid.RowSelectionModel({

            singleSelect : true

        });

    }



    /**

     * 初始化ds: Datasource

     */

    function bulder_ds() {

        ds = new Ext.data.Store({

            // load using HTTP

            proxy : new Ext.data.HttpProxy({

                url : 'sheldon.xml'

            }),

            // the return will be XML, so lets set up a reader

            reader : new Ext.data.XmlReader({

                // records will have an "Item" tag

                record : 'Item',

                id : 'ASIN',

                totalRecords : '@total'

            }, [

                    // set up the fields mapping into the xml doc

                    // The first needs mapping, the others are very basic

                    {

                        name : 'Author',

                        mapping : 'ItemAttributes > Author'

                    }, 'Title', 'Manufacturer', 'ProductGroup'])

        });

    }



    /**

     * 初始化cm: ColumnModel

     */

    function bulder_cm() {

        cm = new Ext.grid.ColumnModel([{

            header : "Author",

            width : 120,

            dataIndex : 'Author'

        }, {

            header : "Title",

            width : 180,

            dataIndex : 'Title'

        }, {

            header : "Manufacturer",

            width : 115,

            dataIndex : 'Manufacturer'

        }, {

            header : "Product Group",

            width : 100,

            dataIndex : 'ProductGroup'

        }]);

        cm.defaultSortable = true;

    }



    return {

        init : function() {

            bulder_cm();

            bulide_sm();

            bulder_ds();

            this.init_grid(); // 產生gird

            ds.load();

        },

        init_grid : function() {

            // create the grid

            grid = new Ext.grid.Grid('example-grid', {

                ds : ds,

                cm : cm,

                selModel : sm,

                enableColLock : false,

                loadMask : true

            });

            grid.render();

        }

    }

}();
最后在页面中载入刚写好的类:
Ext.onReady(XmlGrid.init,XmlGrid,true);
      这样做也许会有人觉得多此一举,但是到程序开发的后期,你一定会遇到更复杂的架构,好比说一个Ext.Gird跟Ext.form互动,结构话的好处是以后在Javasript的开发上,你能将一个个的组件独立出来,方便后期的修改与维护。
分享到:
评论

相关推荐

    Applocation多继承.rar

    Applocation多继承.rar

    用 JavaScript 迁移目录

    数据库包括,Oracle 9i、SQL Server 2005、MySQL 但是装系统,还要设置环境变量,以减少系统盘的占用和增加性能,这就需要迁移系统盘的一些目录了,比如IE临时目录,临时文件夹,Applocation Data;此外,我们还...

    VideoApp-LocalStorage-:录制视频并本地存储的Android Applocation

    VideoApp-LocalStorage-

    Kernel method for Pattern Analysis

    模式分析核方法,重点介绍核方法的概念、原理和应用

    spring aop注解方式、xml方式示例

    演示了spring对aop的支持,包括注解方式、基于xml方式。

    C# Application.DoEvents() 防界面假死例子。

    请自行测试有Application.DoEvents() 和没有Application.DoEvents()的区别,即可。 有疑问可发送Email给我: Andrew.Wangxu@gmail.com

    简易项目管理

    系统架构使用.net winform applocation+SQLite开发,需要.net framework2.0以下支持运行

    54dev个人博客系统 1.0

    使用Zend FrameWork 1.10.7内核,集成了SyntaxHighlighter代码高亮和facebox图片浏览插件。 这个BLOG很初级,很菜。开源的目的只是想和有兴趣的人一起学习提高。 安装使用说明: devcom_54dev.zip是数据库文件...

    crossphp开发框架

    13、增加Applocation::instanceClass(),实例化依赖delegate的类 14、增加Framebase::loadConfig(),用于读取指定的配置文件 15、修复特殊情况下,Router中获取Action为null的BUG 16、移除Config中的set()方法,...

    activiti 7 + springboot2(六) SpringBoot2 整合 Activiti7

    (一)首先 pom.xml 文件中引入相关的依赖 (二)springboot 的配置文件 application.yml中添加相关的配置 (三)流程资源 ...(四)编写Applocation主程序 (五)编写基于SpringBootTest的测试程序

    BlueMix-Tutorial

    ](#ibmiot-client)Python Applocation连接到IBM IoT服务。 该应用程序在IBMIOT库上实现。 我们可以使用命令pip install ibmiotf下载并安装此库。 构造器构建接收到包含以下定义的选项字典的IBMIoT客户端实例: ...

    javaweb-xshop-back:javaweb课设置预设原始码

    4.数据库的配置文件在/src/main/resource/applocation.yml里面 5.数据库脚本就在本仓库的根目录下 账号密码 前端账号:xiaoyou密码:123后台账号:admin密码:123 前端默认访问地址: 最初的访问地址:

    vue-cli-electron-sample

    将应用程序编译为 Electron applocation npm run electron:serve 将电子应用程序构建到dist_electron文件夹 npm run electron:build 为开发编译和热重载 npm run serve 为生产编译和缩小 npm run build 整理和...

    静态变量与非静态变量获取配置文件application中变量值的区别.docx

    springboot引用静态资源static中变量常用方法,经常用到的是非静态变量,在需求类方法中引入比较容易配置,当遇到静态变量时常出现错误,本文档为手动操作样例与结构展示

    安卓捕获本地异常自我调试方案

    安卓捕获本地异常自我调试方案,通过继承Application 获得全局捕获权限,拿到Exception捕获APP发出的崩溃日志信息,在不集成第三方统计分享下自我调试开发,实现敏捷开发的第一个步奏!

Global site tag (gtag.js) - Google Analytics