当前位置:  编程技术>WEB前端
本页文章导读:
    ▪dojo.data      dojo.data规范了四个特性: 读特性(reading), 写特性(writing),标识特性(identifying), 通知特性(notifying)。每一个数据驱动类都要实现一个或者多个特性。数据存储器是数据驱动类的一个实例,它用来从.........
    ▪定义类      dojo中使用dojo.declare来定义类,它有如下三个参数:className: 表示类名(即构造函数)的字符串,通常会在全局空间创建这个类,也可以将类名用点分割,如: "myNamespace.Shape",那么Shape就会最为对象myN.........
    ▪兼容ie getElementsByClassName取标签——某些国企教育机构的web技术好落后啊        一个朋友在某公司为某国企教育机构做网络课程。她的任务是做一些前端页面的工作,但做网络课程的要求是table布局,且得考虑ie6、7、8,不允许用jquery等框架。要知道ie是不支持className.........

[1]dojo.data
    来源:    发布时间: 2013-11-06

dojo.data规范了四个特性: 读特性(reading), 写特性(writing),标识特性(identifying), 通知特性(notifying)。每一个数据驱动类都要实现一个或者多个特性。数据存储器是数据驱动类的一个实例,它用来从数据源获取数据。使用dojo.data需要以下四步:

1 选择一个小部件

2 根据小部件选择合适的数据驱动类

3 声明式或者编程式的创建数据存储器

4 将数据存储器挂载在小部件上

下面是dojo.data的架构

dojo.data中的数据驱动类:

一些术语:

所有特性以及一般方法

驱动类实现的特性

 

本文链接


    
[2]定义类
    来源:    发布时间: 2013-11-06

dojo中使用dojo.declare来定义类,它有如下三个参数:

className: 表示类名(即构造函数)的字符串,通常会在全局空间创建这个类,也可以将类名用点分割,如: "myNamespace.Shape",那么Shape就会最为对象myNamespace的属性,如果myNamespace不存在,那么myNamespace.Shapde就会作为全局空间的属性。

superclass: 可选项(null, 函数或者函数数组),指明这个类的父类或者要聚合的类。

props: 一个包含了属性的对象自变量,用来初始化类的原型。如果这个对象自变量中含有一个叫constructor的函数,那么这个函数用来初始化对象实例,叫做初始化函数。

下面用它来创建一个Shape类:

dojo.declare("Shape", null, {color: 0, setColor: function(color) {this.color = color;}});

创建一个Shape对象: var s = new Shpae();

Shape类包含下面属性:

superclass:指向父类原型,如果没有就为undefined。

mixin: 指向聚合类的原型,如果没有就为undefiened。

extend: 一个高级应用,下面要讲。

_constructor: 指向类的初始化函数,这个函数负责构造所有的实例属性,当创建新对象时,有构造函数自动调用。

declaredClass: 就是传给dojo.declare的第一个参数。

inherited: 指向一个用于调用父类方法的函数

使用单继承定义类

为了是子类继承父类,只要将dojo.declare的第二个参数设置为父类的构造函数就可以了:

/*Circle继承自Shape*/
dojo.declare("Circle", Shape, {
radius: 0;
/*名为constructor的函数来初始化新实例,再调用构造函数的时候被自动调用*/
constructor: function(radius) {
this.radius = radius || 0;
},
setRadius: function(radius) {
this.radius = radius;
}
});

当创建一个Circle对象时,dojo会做两件事:

1 调用父类构造函数

2 调用子类自身的初始化函数

var circle = new Circle(5);

/*调用父类构造函数*/
Shape.apply(this, arguments);
/*调用子类初始化函数*/
this._constructor.apply(this, arguments);

Circle类的原型会指向Shape的原型。

重载父类的方法

子类通常会覆写父类的方法,而且还会在覆写的方法中调用父类的方法,可以通过inherited方法实现这个操作。

/*Circle继承自Shape*/
dojo.declare("Circle", Shape, {
radius: 0;
/*名为constructor的函数来初始化新实例,再调用构造函数的时候被自动调用*/
constructor: function(radius) {
this.radius = radius || 0;
},
setRadius: function(radius) {
this.radius = radius;
},
/*覆写父类中的setColor方法*/
setColor: function(color) {
if (color > 100) {
this.inherited(arguments); //调用父类中的版本
}
}
});

inherited会找到父类中的方法,然后通过下面的形式调用:

1.function inherited(args, a, func){
2. // crack arguments
3. if(typeof args == "string"){
4. name = args;
5. args = a;
6. a = func;
7. }
8.   // find method f
9. ……
10.   if(f){
11.    return a === true ? f : f.apply(this, a || args);
12.   }
13.}

inherited接受三个参数:

methodName: 要调用的方法名,可选。

args: 即arguments字面量,必选

a: 额外的参数数组,若有这个参数,父类中的方法就不接受arguments字面量。可选

向父类添加方法

向由dojio.declare创建的类的原型中添加方法,应该调用类自带的extend方法,而向其他非dojo.declare创建的构造函数原型中添加方法,调用dojo.extend.

聚合与多继承

dojo.declare可以模拟多继承,这是以聚合的方式实现的。比如现在有一个Circle类,有

    
[3]兼容ie getElementsByClassName取标签——某些国企教育机构的web技术好落后啊
    来源:    发布时间: 2013-11-06

  一个朋友在某公司为某国企教育机构做网络课程。她的任务是做一些前端页面的工作,但做网络课程的要求是table布局,且得考虑ie6、7、8,不允许用jquery等框架。要知道ie是不支持className取标签的啊,如果要通过className获取标签怎么办啊。你可以通过这个方法:

function getElementsByClassName(className,tagName) {
tagName=tagName||"*"; //此代码的目的是,参数tagName可以不写。
if (document.getElementsByClassName) { //如果浏览器支持getElementsByClassName,就直接的用
return getElementsByClassName(className);
}else {
var tag= document.getElementsByTagName(tagName); //获取指定元素
var tagAll = []; //用于存储符合条件的元素
for (var i = 0; i < tag.length; i++) { //遍历获得的元素
for(var j=0,n=tag[i].className.split(' ');j<n.length;j++){ //遍历此元素中所有class的值,如果包含指定的类名,就赋值给tagnameAll
if(n[j]==className){
tagAll.push(tag[i]);
break;
}
}
}
return tagAll;
}
}

  记得我大学的网站还是table满天飞呢。互联网贫瘠的地方恰恰是国企、ZF部门,一直很纳闷几大国有银行的网银为什么只有ie内核的浏览器才能登陆、支付。或许他们有他们的原因,我现在的知识面太小了,需要学习的东西太多太多。

 

 

 

本文链接


    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
jquery iis7站长之家
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3