`
shaohan126448
  • 浏览: 118816 次
  • 来自: 北京
社区版块
存档分类
最新评论

第 8 章 哭泣吧!现在才开始讲基础问题。

阅读更多

8.1. Ext.get

 

ext里用来获得Element的一个函数,用途还算比较广,可以通过不少途径获得咱们需要的Element,而这个Element包括很多有趣的功能。

Element跟document.getElementById("myDiv")得到的dom对象是不一样的,虽然你还可以使用老方式获得指定id的元素,但那样就失去了ext提供的各种常用操作,动画啦,定位啦,css啦,事件啦,拖拽啦。其实也不用担心,即便使用了Ext.get()获得了myDiv,还是可以直接访问document.getElementById()应该得到的部分,而且挺简单的,Ext.get().dom就可以了。

下面让偶们来看看这些基本的功能会是咋样呢?

  1. 先获得一个Element

    var myDiv = Ext.get('myDiv');

    这里我们传入的是一个id,你可以在html里看到<div id="myDiv"></div>,然后我们用Ext.get('myDiv')从html里取得这个div,然后封装成Element对象,现在这个对象就已经放到缓存中了,以后再用的时候就更快撒。

  2. 最吸引眼球的是动画效果,所以我们先动两下。

    myDiv.hightlight();

    红色高亮,然后渐退。

    myDiv.addClass('red');

    添加自定义CSS类,css里有.red {background: red;}的定义,这样myDiv的背景直接变成了红色。

    myDiv.center();

    myDiv移动的窗口中间,包括垂直和竖直居中。

    myDiv.setOpacity(.25);

    使myDiv半透明

  3. 再看看怎么才好渐变动画

    myDiv.setWidth(100);

    这样可以直接设置myDiv的宽度,是没有渐变动画的。

    myDiv.setWidth(100, true);

    这样就打开了动画开关,如此简单就可以看到myDiv在动咯。

    咱们还可以控制动画的动作,如下

    myDiv.setWidth(100, {
        duration: 2,
        callback: this.highlight,
        scope: this
    });

    duration是间隔,数字越大移动越慢,callback说是动画完成后执行,但我没饰演出来,scope是callback执行的范围。

动画没法截图,还是看看lingo-sample/1.1.1/08-01.html,lingo-sample/2.0/08-01.html吧,四个按钮可以让myDiv在窗口里乱动,哈哈。

8.2. 要是我们想一下子获得一堆元素咋办?

 

现在像css那样的批量选择方式真的很流行,ext里也没有落伍,一定会赶这个潮流。

  1. 选择所有<P>元素

    现在我们要获得所有<P>元素,然后让他们都闪一下。

    Ext.select("p").highlight();
  2. 按照css的class选择

    首先我们有几个div,都使用class="red",然后我们让他们都闪一下,嘿嘿嘿~因为highlight()调用比较简单嘛。

    Ext.select("div.red").highlight();

这种方式在prototype和jquery里已经发扬光大,而且还光大得很呢,你只需要按照css的选择方式,就可以得到你需要的集合。这方面其实jquery颇为神奇,把select用的真是出神入化,可叹,它对js封装太狠,你用jquery的时候完全感觉不到自己是在用javascript,这样接触原生方法的机会很少,等于把自己绑定到jquery上,最后权衡利弊,只好忍痛割爱了。

批量选择,见lingo-sample/1.1.1/08-02.html和lingo-sample/2.0/08-02.html。

8.3. DomHelper和Template动态生成html

 

用dom生成html元素一直是头疼的事情,以前都是听springside的教导,使用jsTemplate和Scriptaculous的组合。现在到了ext里面,我们就来看看它自己的实现。

8.3.1. DomHelper用来生成小片段

 

使用DomHelper非常灵活,超简单就可以生成各种html片段,遇到复杂情况也要求助于它。

大概就是这么用

var list = Ext.DomHelper.append('parent', {tag: 'div', cls: 'red'});

它就是向id=parent这个元素里,添加一个div元素。

按照文档里讲的,第二个参数{}里,除了四个特殊属性以外都会复制给新生成元素的属性,这四个特殊属性是

  1. tag,告诉我们要生成一个什么标签,div啦,span啦,诸如此类。

    千万别告诉我到现在你还不知道这些html标签,中间告诉你多少次先去学学html和css啦?你飞过来的不成?

  2. cls,指的是<div class="red"></div>这种标签中的class属性,因为class是关键字,正常情况下应该写成className,可jack说className太长了,最后就变成cls了。-_-。

    他就喜欢玩这个,把dataStore写成ds,DomHelper写成dh,Element写成el,ColumnModel写成cm,SelectionModel是sm。唉,发明的专业名词缩写好多呀。

  3. children,用来指定子节点,它的值是一个数组,里边包含了更多节点。

  4. html,对应innerHTML,觉得用children描述太烦琐,直接告诉节点里边的html内容也是一样。

DomHelper除了append还有几个方法,指定将新节点添加到什么位置。

为了比对效果,先放一个初始页面。

原始的html是这样的。一个div下有4个节点,其中第三个子节点下还有自己的子节点。

<div id="parent" style="border: 1px solid black;padding: 5px;margin: 5px;background: lightgray;">
  <p id="child1">child1</p>
  <p id="child2">child2</p>
  <div id="child3">
    <p id="child5">inner child</p>
  </div>
  <p id="child3">child4</p>
</div>
  1. append是将新节点放到指定节点的最后。

    Ext.DomHelper.append('parent', {tag: 'p', cls: 'red', html: 'append child'});
  2. insertBefore,新节点插入到指定节点前面。

    Ext.DomHelper.insertBefore('parent', {tag: 'p', cls: 'red', html: 'insert before child'})
  3. insertAfter,新节点插入到指定节点后面。

    Ext.DomHelper.insertAfter('parent', {tag: 'p', cls: 'red', html: 'insert before child'})
  4. overwrite,会替换指定节点的innerHTML内容。

    Ext.DomHelper.overwrite('child3', {tag: 'p', cls: 'red', html: 'overwrite child'})

闲来无聊,也看一看children这个属性的用法。

Ext.DomHelper.append('parent', {
    tag: 'ul',
    style: 'background: white;list-style-type: disc;padding: 20px;',
    children: [
        {tag: 'li', html: 'li1'},
        {tag: 'li', html: 'li2'},
        {tag: 'li', html: 'li3'}
    ]
});

这样就在parent里添加了一个ul标签,ul里包含三个li。呵呵~炫啊。

代码见lingo-sample/1.1.1/08-03.html和lingo-sample/2.0/08-03.html。

8.3.2. 批量生成还是需要Template模板

 

场景模拟:目前有三男两女的json数据,要输出成html显示出来。

var data = [
    ['1','male','name1','descn1'],
    ['2','female','name2','descn2'],
    ['3','male','name3','descn3'],
    ['4','female','name4','descn4'],
    ['5','male','name5','descn5']
];

照搬grid时的测试数据呢,嘿嘿。只不过这次我们用的不再是ds,cm,grid的方式解析输出,而是用模板自己定义输出的格式。

首先要定义一个模板

var t = new Ext.Template(
    '<tr>',
        '<td>{0}</td>',
        '<td>{1}</td>',
        '<td>{2}</td>',
        '<td>{3}</td>',
    '</tr>'
);
t.compile();

索引从0开始,一共4个元素。然后在用的时候,这样子。

for (var i = 0; i < data.length; i++) {
    t.append('some-element', data[]);
}

这段代码对应html中的一个表格,id="some-element"是tbody的id,我们使用模板为table增添了四行。

<table border="1">
    <tbody id="some-element">
        <tr>
            <td>id</td>
            <td>sex</td>
            <td>name</td>
            <td>descn</td>
        </tr>
    </tbody>
</table>

最终的显示结果就是包含五行数据的表格:

定义模板的时候,可以使用Ext.util.Format里的工具方法,对数据进行格式化。常用的就是trim去掉收尾空格和ellipsis(10),ellipsis判断,当字符长度超过10时,自动截断字符串并在末尾添加省略号,很常用的功能哩。

在模板里使用这些函数的话也很简单,不过我不说,你还是不知道,嘿嘿

var t = new Ext.Template(
    '<tr>',
        '<td>{0}</td>',
        '<td>{1:trim}</td>',
        '<td>{2:trim}</td>',
        '<td>{3:ellipsis(10)}</td>',
    '</tr>'
);
t.compile();

如此这般,冒号加函数名称就可以实现我们的愿望了。

可惜人算终不如天算,jack再神奇,也不可能考虑到所有的可能性,比如现在我们就想根据性别不同显示图片,jack怕是想破了脑袋,也想不出这种可能来,所以呢,他干脆不想了,而是给咱们留了一个自定义函数的接口。

var t = new Ext.Template(
    '<tr>',
        '<td>{0}</td>',
        '<td>{1:this.renderSex}</td>',
        '<td>{2:trim}</td>',
        '<td>{3:ellipsis(10)}</td>',
    '</tr>'
);
t.renderSex = function(value) {
    if (value == 'male') {
        return "<span style='color:red;font-weight:bold;'>红男</span><img src='user_male.png' />";
    } else {
        return "<span style='color:green;font-weight:bold;'>绿女</span><img src='user_female.png' />";
    }
};
t.compile();

显示的红男绿女,就像我们预想的那样呈现在我们眼前了。

你可以从lingo-sample/1.1.1/08-05.html和lingo-sample/2.0/08-05.html看到这些例子,实际上,这两个文件的内容是完全相同的

分享到:
评论

相关推荐

    EXT2.0 简明教程!(chm)

    哪里都没有找到下载,就自己弄了下,方便随时查看 &lt;br&gt;第 1 章 闪烁吧!...现在才开始讲基础问题。 第 9 章 沉寂吧!我们要自己的控件 说在前头的 附录 A. 常见问题乱弹 附录 C. 后记

    EXT 教程

    EXT 教程 第 1 章 闪烁吧!看看extjs那些美丽的例子。_files 第 2 章 震撼吧!让你知道ext表格控件的厉害。_files 第 3 章 歌颂吧!只为了树也要学ext。...现在才开始讲基础问题。.htm

    基于CST软件的三维超材料能带计算及其应用

    内容概要:本文介绍了如何利用CST软件进行三维超材料的能带计算。首先概述了三维超材料的独特性质及其广泛应用前景,接着简要介绍了CST软件的功能特点。随后详细阐述了能带计算的具体步骤,包括模型建立、材料参数设置、网格划分与求解设置以及最终的计算与结果分析。最后给出了一段Python代码示例,展示了如何处理CST输出的数据并绘制能带图。文章强调了计算机模拟技术对于深入了解超材料电子结构和物理性质的重要性。 适合人群:从事材料科学研究的专业人士,尤其是对三维超材料和电磁场模拟感兴趣的科研工作者和技术人员。 使用场景及目标:适用于希望借助CST软件开展三维超材料能带计算的研究项目,旨在提高对超材料的理解,推动相关领域的技术创新和发展。 其他说明:文中提供的Python代码仅为示例,在实际操作时可根据具体情况进行调整优化。同时,掌握CST软件的基本操作和电磁理论基础知识有助于更好地理解和应用本文内容。

    基于FPGA的永磁同步伺服系统设计:电流环及矢量控制实现

    内容概要:本文详细介绍了基于FPGA的永磁同步伺服系统的矢量控制设计,涵盖了从电流环到速度环的关键模块实现。具体包括Clarke和Park变换、PI调节器、AD7606采样、正交编码器反馈以及SVPWM生成等部分。文中提供了详细的Verilog代码片段,展示了各个模块的具体实现方法和技术细节。特别强调了定点数处理、时序设计和跨时钟域处理等方面的技术挑战及其解决方案。 适合人群:具备一定FPGA开发经验和电机控制基础知识的研发人员。 使用场景及目标:适用于希望深入了解FPGA在电机控制应用中的具体实现方式,特别是矢量控制和电流环设计的专业人士。目标是掌握FPGA平台下高效、低延迟的电机控制系统设计方法。 阅读建议:由于涉及大量具体的Verilog代码和硬件设计细节,建议读者在阅读过程中结合实际项目进行实验和调试,以便更好地理解和掌握相关技术。

    飞机大战:从运动方程到战斗系统的全链路设计解析

    经典飞机大战游戏是理解实时交互系统设计的绝佳载体。本文将深入剖析现代空战游戏的核心模块,涵盖刚体运动学、弹道轨迹优化、碰撞检测算法等关键技术,揭示二维游戏背后复杂的三维数学建模过程。

    scratch少儿编程逻辑思维游戏源码-冰塔.zip

    scratch少儿编程逻辑思维游戏源码-冰塔.zip

    scratch少儿编程逻辑思维游戏源码-弹跳(4).zip

    scratch少儿编程逻辑思维游戏源码-弹跳(4).zip

    COMSOL焊接热源模型解析:双椭球、高斯旋转体与柱状体热源的应用与优化

    内容概要:本文详细介绍了COMSOL软件中三种常见的焊接热源模型——双椭球热源、高斯旋转体热源和柱状体热源。双椭球热源适用于模拟移动热源(如激光焊、电弧焊),通过调整轴向系数a1和a2来控制热流分布;高斯旋转体热源适合小范围焊接,采用三维高斯函数描述热流密度;柱状体热源则用于深熔焊场景,特点是计算速度快。文中还提供了每种模型的具体代码实现,并强调了调试时需要注意的关键点,如时间步长、网格加密等。此外,作者分享了一些实用技巧,如将热源参数设置为全局变量并利用参数扫描功能提高调试效率。 适合人群:从事焊接工艺仿真、材料加工领域的研究人员和技术人员,以及对COMSOL建模感兴趣的工程技术人员。 使用场景及目标:帮助用户选择合适的热源模型进行焊接模拟,确保模拟结果的准确性;提供具体的代码实现和调试方法,使用户能够快速掌握并应用于实际项目中。 其他说明:文中提到的热源模型不仅限于理论介绍,还包括实际操作中的注意事项和优化建议,有助于提升模拟效果和工作效率。

    基于RBF神经网络的PID控制器在PMSM转速环中的Simulink模型设计与性能分析

    内容概要:本文介绍了将基于RBF神经网络的PID控制器应用于永磁同步电机(PMSM)转速环控制的方法及其性能优势。传统的PID控制器在面对非线性和时变系统时存在参数整定困难的问题,而引入RBF神经网络可以实现实时在线调参,提高系统的灵活性和鲁棒性。文中详细描述了Simulink模型的设计,特别是Matlab s-function模块中RBF神经网络的具体实现,包括高斯函数激活和带惯性的权值更新机制。实验结果显示,在转速突变情况下,改进后的控制器能够迅速稳定系统,超调量控制在2%以内,调节时间较传统方法缩短约40%,并且在负载变化时表现出色,无需重新整定参数。 适合人群:从事电机控制系统研究和开发的技术人员,尤其是对PID控制器优化感兴趣的工程师。 使用场景及目标:适用于需要提升PMSM转速环控制精度和响应速度的应用场合,如工业自动化设备、机器人等领域。目标是通过引入智能算法解决传统PID控制器参数整定难题,提高系统性能。 阅读建议:关注RBF神经网络与PID控制器结合的具体实现细节,特别是在Matlab s-function模块中的编码技巧以及参数调整策略。同时,注意学习率的选择和动量项的作用,这对于实际应用至关重要。

    scratch少儿编程逻辑思维游戏源码-GTA 6.zip

    scratch少儿编程逻辑思维游戏源码-GTA 6.zip

    scratch少儿编程逻辑思维游戏源码-仓鼠跑酷.zip

    scratch少儿编程逻辑思维游戏源码-仓鼠跑酷.zip

    scratch少儿编程逻辑思维游戏源码-超级麦克世界.zip

    scratch少儿编程逻辑思维游戏源码-超级麦克世界.zip

    scratch少儿编程逻辑思维游戏源码-400年.zip

    scratch少儿编程逻辑思维游戏源码-400年.zip

    少儿编程scratch项目源代码文件案例素材-气球足球.zip

    少儿编程scratch项目源代码文件案例素材-气球足球.zip

    少儿编程scratch项目源代码文件案例素材-沙漠迷城.zip

    少儿编程scratch项目源代码文件案例素材-沙漠迷城.zip

    scratch少儿编程逻辑思维游戏源码-比谁高.zip

    scratch少儿编程逻辑思维游戏源码-比谁高.zip

    少儿编程scratch项目源代码文件案例素材-乾坤大挪移.zip

    少儿编程scratch项目源代码文件案例素材-乾坤大挪移.zip

    scratch少儿编程逻辑思维游戏源码-菜鸟跳跃.zip

    scratch少儿编程逻辑思维游戏源码-菜鸟跳跃.zip

    【C++编程语言】核心特性详解、学习笔记

    内容概要:本文档详细介绍了C++语言的基础知识、高级特性及其应用。首先,文档回顾了C++对C语言的扩展,包括面向对象编程的支持、增强的语法特性(如命名空间、引用、常量处理等)。接着,深入探讨了类和对象的使用,涵盖构造函数、析构函数、拷贝构造函数、深浅拷贝等重要概念。文档还讲解了单例模式的设计与实现、C++面向对象模型的核心要素(如this指针、静态成员、友元函数)、继承与派生的关系及其实现细节、多态性的原理与应用。此外,文档详细介绍了C++的模板机制、类型转换、异常处理机制、输入输出流操作、STL(标准模板库)的容器和算法等内容。每个部分都通过具体的代码示例和解释,帮助读者理解和掌握C++的关键特性和最佳实践。 适合人群:具备一定编程基础,尤其是熟悉C语言的开发者;希望深入了解C++语言特性和面向对象编程思想的程序员;从事C++开发工作的工程师和技术爱好者。 使用场景及目标:①掌握C++语言的核心概念和高级特性;②理解并能够应用面向对象编程的基本原则和模式;③学习如何使用STL容器和算法优化代码性能;④提升C++程序的健壮性和可维护性,特别是在处理复杂数据结构和算法时;⑤掌握异常处理和类型转换的最佳实践,确保程序的稳定性和安全性。 其他说明:本文档不仅提供了理论知识,还结合了大量实例代码,便于读者边学边练。对于每一个知识点,文档都力求做到详尽解释,确保读者能够透彻理解并灵活运用。文档内容全面覆盖了C++编程的各个方面,从基础语法到高级特性,适合不同层次的学习者逐步深入学习。

    电气铁路柔性过分相技术:60°换相波形稳定分析及其实现方法

    内容概要:本文详细探讨了电气铁路柔性过分相技术中的60°换相波形稳定问题。首先介绍了柔性过分相的基本概念及其重要性,接着重点讨论了60°换相波形稳定对系统运行效率和稳定性的影响。文中还阐述了实现换相波形稳定的多种方法,如先进控制算法、实时监测设备以及滤波器的应用。最后,通过引用相关文献和实例,进一步验证了换相波形稳定的重要性和可行性。 适合人群:从事电气铁路系统设计、维护的技术人员,以及对该领域感兴趣的科研人员。 使用场景及目标:适用于希望深入了解电气铁路柔性过分相技术的专业人士,旨在帮助他们掌握60°换相波形稳定的相关理论和技术手段,提升系统性能。 其他说明:文章结合了理论分析与实际案例,提供了丰富的参考资料,有助于读者全面理解并应用于实际工作中。

Global site tag (gtag.js) - Google Analytics