原文出处: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
数据库包括,Oracle 9i、SQL Server 2005、MySQL 但是装系统,还要设置环境变量,以减少系统盘的占用和增加性能,这就需要迁移系统盘的一些目录了,比如IE临时目录,临时文件夹,Applocation Data;此外,我们还...
VideoApp-LocalStorage-
模式分析核方法,重点介绍核方法的概念、原理和应用
演示了spring对aop的支持,包括注解方式、基于xml方式。
请自行测试有Application.DoEvents() 和没有Application.DoEvents()的区别,即可。 有疑问可发送Email给我: Andrew.Wangxu@gmail.com
系统架构使用.net winform applocation+SQLite开发,需要.net framework2.0以下支持运行
使用Zend FrameWork 1.10.7内核,集成了SyntaxHighlighter代码高亮和facebox图片浏览插件。 这个BLOG很初级,很菜。开源的目的只是想和有兴趣的人一起学习提高。 安装使用说明: devcom_54dev.zip是数据库文件...
13、增加Applocation::instanceClass(),实例化依赖delegate的类 14、增加Framebase::loadConfig(),用于读取指定的配置文件 15、修复特殊情况下,Router中获取Action为null的BUG 16、移除Config中的set()方法,...
(一)首先 pom.xml 文件中引入相关的依赖 (二)springboot 的配置文件 application.yml中添加相关的配置 (三)流程资源 ...(四)编写Applocation主程序 (五)编写基于SpringBootTest的测试程序
](#ibmiot-client)Python Applocation连接到IBM IoT服务。 该应用程序在IBMIOT库上实现。 我们可以使用命令pip install ibmiotf下载并安装此库。 构造器构建接收到包含以下定义的选项字典的IBMIoT客户端实例: ...
4.数据库的配置文件在/src/main/resource/applocation.yml里面 5.数据库脚本就在本仓库的根目录下 账号密码 前端账号:xiaoyou密码:123后台账号:admin密码:123 前端默认访问地址: 最初的访问地址:
将应用程序编译为 Electron applocation npm run electron:serve 将电子应用程序构建到dist_electron文件夹 npm run electron:build 为开发编译和热重载 npm run serve 为生产编译和缩小 npm run build 整理和...
springboot引用静态资源static中变量常用方法,经常用到的是非静态变量,在需求类方法中引入比较容易配置,当遇到静态变量时常出现错误,本文档为手动操作样例与结构展示
安卓捕获本地异常自我调试方案,通过继承Application 获得全局捕获权限,拿到Exception捕获APP发出的崩溃日志信息,在不集成第三方统计分享下自我调试开发,实现敏捷开发的第一个步奏!