此篇开始,我们正式进入了控件开发之旅,首先,一套好用的控件,要有一套实用的继承关系,我这里先列出初步的类关系图,大致如下
com.baseObject
+--com.list
+--com.treeNode
+--com.treeList
+--com.ui.window
+--com.ui.scrollBar
+--com.ui.botton
+--com.ui.calendar
+--com.ui.panel
+--com.ui.frame
+--com.ui.listView
+--com.ui.treeView
+--com.ui.grid
+--com.ui.toolBar
+--com.ui.speedBotton
+--com.ui.drop.popWindow
+--com.ui.drop.popMenu
+--com.ui.drop.popListView
+--com.ui.drop.popCalendar
+--com.ui.input.edit
+--com.ui.input.number
+--com.ui.input.datePicker
+--com.ui.input.comboBox
当然,我们这些继承关系也并非单纯的继承,其中还有一些混合控件,比如com.ui.treeView就是由com.treeList、com.ui.scrollBar加上com.ui.treeView本身组合而成, 此处我们不进行详细说明,而是直接开门见山的写第一个控件基类com.baseObject.js
首先我们在框架中script目录下添加component文件夹,component主要用于放置上面的控件代码文件,框架目录如下:
+--demo
+--script
+--common
+--init.js
+--staticScript.js
+--extend.js
+--render.js
+--nameSpace.js
+--css
+--com.comStyle.css
+--component
+--com.baseObject.js
+--web
+--test.html
先写第一个控件类com.baseObject并把文件放入component文件夹内, 如上目录图,
作为所有控件基类,该类我们只用来做一些基本的事情,
1. 初始化浏览器对象,
2. 定义并执行create函数,
3. 输出日志
4. 计算字符串长度
5. 判断变量是否空
6. 给数值增加千分符
当然,后续我们需要的话还可以增加别的功能函数,因比较简单,直接上整个类代码,
/**
* 基础控件类
* 创建:qzz
* 日期: 2014-04-06
*/
(function(undefined) {
nameSpace("com");
com.baseObject = Extend({
/**
* 初始化方法,合并处理界面和元模型的属性.
* @param option 属性
*/
init:function(option) {
this.index = com.baseObject.index++;
//控件属性
if(typeof option != "undefined") {
this.option = option;
} else {
this.option = {};
}
//this.base();
this.logInfo("baseObject.init");
var ua = navigator.userAgent.toLowerCase();
//浏览器判断
this.browser = {
msie:(/msie ([\d.]+)/).test(ua),
firefox:(/firefox\/([\d.]+)/).test(ua),
chrome:(/chrome\/([\d.]+)/).test(ua),
opera:(/opera.([\d.]+)/).test(ua),
safari:(/version\/([\d.]+)/).test(ua)
};
//是否控件的判断
this.isComponent = true;
//执行创建函数
this.create();
},
/**
* 创建函数.
*/
create:function(){
this.className = "com.baseObject";
this.logInfo("baseObject.create");
this._update = true;
this.beginDate = null;
},
/**
* 获取控件名.
*/
getName:function() {
return this.name || this.className;
},
/**
*日志输出函数 .
*@param str 字符串
*@param date 日期
*/
logInfo:function(str){
if(typeof window.console != "undefined") {
var date = new Date();
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
var ms = date.getMilliseconds();
window.console.info("["+h+":"+m+":"+s+"."+ms+"]["
+ this.index + ":" + this.getName() + "]" + str);
date = null;
}
},
/**
* 时间统计日志.
* @param str 字符串
*/
logBegin:function(str) {
this.beginDate = new Date();
this.logInfo("[BEGIN]" + str, this.beginDate);
},
/**
* 时间统计日志.
* @param str 字符串
*/
logEnd:function(str) {
if(this.beginDate != null) {
var bh = this.beginDate.getHours();
var bm = this.beginDate.getMinutes();
var bs = this.beginDate.getSeconds();
var bms = this.beginDate.getMilliseconds();
var date = new Date();
var eh = date.getHours() - bh;
var em = date.getMinutes() - bm;
if(em < 0) {
eh --;
em += 60;
}
var es = date.getSeconds() - bs;
if(es < 0) {
em --;
es += 60;
}
var ems = date.getMilliseconds() - bms;
if(ems < 0) {
es --;
ems += 1000;
}
this.logInfo("[END]" + str + " use " + eh+":"+em+":"+es+"."+ems);
date = null;
this.beginDate = null;
}
},
/**
* 字符串长度.
* @param str 字符串
*/
strLen:function(str) {
var v = str;
var len = 0;
for(var i=0; i<v.length; i++) {
if(v.charCodeAt(i)>256) {
len += 2;
} else {
len++;
}
}
v = null;
i = null;
return len;
},
/**
* 是否为空.
* @param value 判断的值
*/
isEmpty:function(value) {
return (typeof value == "undefined" || value == null || value === "");
},
/**
* 是否不为空.
* @param value 判断的值
*/
isNotEmpty:function(value) {
return !this.isEmpty(value);
},
/**
* 数值型添加千分符.
* @param value 数值
*/
numberFormat:function(value) {
return (value + "").replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g, "$1,");
},
/**
* 注析掉当前类.
*/
destroy:function() {
this.option = null;
}
});
com.baseObject.index = 0;
})();
并把文件添加到staticScript列表中,如下,
重点说明一下, 因我们加载的脚本是有顺序要求的,因此该文件,包括后续写的控件文件的加载顺序都必须在渲染文件(render.js)之前,
staticScript = [
"../css/com.comStyle.css",
"extend.js",
"nameSpace.js",
"../component/com.baseObject.js",
"render.js"
]
为了让大家对控件有一个初步的体验,我们下一篇将先编写com.ui.window对象,并展示到html页面上,请关注下一篇,javascript控件开发之可见控件
整包请下载附件
分享到:
相关推荐
在这个主题中,“javascript控件开发之继承关系”主要探讨的是如何利用JavaScript的面向对象特性来构建和组织控件的层次结构,以及如何通过继承来实现代码的复用和模块化。 在JavaScript中,继承是基于原型...
在JavaScript控件开发中,"可见控件"是构建用户界面UI的重要组成部分。这些控件是用户与应用程序交互的桥梁,比如按钮、文本框、下拉列表等。本篇文章将聚焦于可见控件的渲染基类,这是创建自定义、高级控件的基础。...
在“javascript控件开发之可见控件(2)”这个主题中,我们将深入探讨如何在JavaScript中构建可控制其可见性的控件,并且在上一篇的基础上,通过添加事件相关函数来增强控件的灵活性和可扩展性。 首先,我们需要理解...
JavaScript控件开发是Web开发中的重要一环,特别是在构建交互丰富的网页应用时。布局控件是其中的关键元素,它允许开发者有效地组织和管理页面上的元素,实现多控件的协调和共存。在这个主题中,我们将深入探讨...
动态加载作为JavaScript控件开发中的一个重要概念,是提升网页性能和用户体验的关键手段。动态加载意味着控件或资源不是在页面加载时一次性全部加载,而是根据需要按需加载,从而减少了初始页面加载时间,降低了对...
在JavaScript控件开发中,工具栏控件是一个关键的元素,它通常被用来提供用户界面中的功能快捷方式或操作选项。工具栏控件的设计和实现是网页交互性的重要组成部分,尤其是在构建富客户端应用或者增强用户体验的网页...
在JavaScript的世界里,控件是构建用户界面的基本元素,它们为用户提供交互能力,使得Web应用更具活力和用户体验。...记住,实践是提高技能的关键,不断地尝试和改进,你将成为一名出色的JavaScript控件开发者。
JavaScript控件是网页开发中常用的一种元素,它们用于增强用户界面的交互性和功能。JavaScript是一种轻量级的脚本语言,常被嵌入HTML页面中,以实现动态内容的生成和用户交互。在这个主题中,我们将深入探讨...
这些JavaScript控件体现了JavaScript在前端开发中的强大能力,它们可以提升用户体验,使网页更加动态和互动。开发者可以学习并利用这些组件,快速构建具有高级特性的网页应用,同时也可以自定义样式和行为,以适应...
在网页中,本身就有滚动条,在显示文本内容的时候,原始的滚动条已够用,一般如果我们想实现一个类似列表的控件时,也可以把所有的列表数据输出到一个完整的标签,再嵌入到一个DIV中即可,然而如果数据量达到几千行...
总之,JavaScript控件在现代Web开发中扮演着重要角色,它们不仅增强了页面的交互性和用户体验,也降低了开发者的工作负担。熟练掌握和运用JavaScript控件,能让你的Web应用更加生动、高效且易于维护。
"java源代码"标签可能意味着这个时间控件包含Java语言的后端部分,用于处理与前端JavaScript控件的交互,例如验证用户输入的时间数据,或者将时间数据保存到数据库。Java的后端可以使用Servlet、JSP(JavaServer ...
JavaScript密码输入控件是网页开发中常见的一种交互元素,它用于收集用户的安全信息,如登录密码、PIN码等。在Web应用中,正确地实现密码输入控件对于提高用户体验和保障数据安全至关重要。本文将深入探讨JavaScript...
在企业级Web应用开发中,页面控件的设计与实现至关重要,因为它们直接影响到用户体验和交互效率。本主题聚焦于一个常见的、实用的页面组件——JavaScript选项卡控件。选项卡控件是网页设计中用于组织和展示大量信息...
ASP.NET控件开发是构建动态Web应用程序的关键技术之一。这些资料涵盖了从基础知识到高级技巧,帮助开发者深入理解ASP.NET控件的工作原理以及如何自定义它们。以下是对这些资源的详细解读: 1. **ASP.NET控件开发...
在Web2.0控件开发中,Ajax(Asynchronous JavaScript and XML)技术起到了关键作用。Ajax允许页面在不刷新整个页面的情况下与服务器进行数据交换,提升了用户体验。开发者需要掌握JavaScript、XMLHttpRequest对象、...