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

第 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

    掏钱学Ext(完整版) 附全部源码

    现在才开始讲基础问题。 8.1. Ext.get 8.2. 要是我们想一下子获得一堆元素咋办? 8.3. DomHelper和Template动态生成html 8.3.1. DomHelper用来生成小片段 8.3.2. 批量生成还是需要Template模板 9. 沉寂吧!...

    八年级政治下册 第一单元 第二课《哭泣的自然》学案(无答案) 教科版

    八年级政治下册 第一单元 第二课《哭泣的自然》学案(无答案) 教科版

    八年级政治下册_第二课《哭泣的自然》课件.ppt

    【标题】"八年级政治下册_第二课《哭泣的自然》课件.ppt"讨论的是环境保护和生物多样性的主题,特别关注了生物物种减少、水资源短缺、土地荒漠化以及由此引发的沙尘暴问题。 【内容分析】 1. 生物物种减少:课件...

    八年级政治下册 第2课《哭泣的自然》教案 教科版.doc

    这篇文档是针对中学八年级政治课程的一个教案,主题为“哭泣的自然”,旨在教育学生认识到地球资源的枯竭、环境破坏及其对生态系统的影响。教案分为六个环节,详细讲解了资源枯竭、生物灭绝、土地荒漠化、水资源短缺...

    EXT2.0中文教程

    现在才开始讲基础问题。 8.1. Ext.get 8.2. 要是我们想一下子获得一堆元素咋办? 8.3. DomHelper和Template动态生成html 8.3.1. DomHelper用来生成小片段 8.3.2. 批量生成还是需要Template模板 8.4. Ext.data命名...

    八年级政治下册 第一单元 第二课《哭泣的自然》教案 教科版.doc

    《哭泣的自然》这堂课主要探讨了环境保护和资源枯竭的问题,旨在引导中学生认识到地球资源的宝贵性,理解人类活动对环境的影响,并激发他们珍爱地球、保护环境的意识。以下是课程中的主要知识点: 1. 自然资源的...

    Ext 开发指南 学习资料

    现在才开始讲基础问题。 8.1. Ext.get 8.2. 要是我们想一下子获得一堆元素咋办? 8.3. DomHelper和Template动态生成html 8.3.1. DomHelper用来生成小片段 8.3.2. 批量生成还是需要Template模板 8.3.3. 醍醐灌顶,...

    不再哭泣高一作文.pdf

    2. 另一篇作文描绘了作者从家庭搬到宿舍生活的转变,经历孤独和不适应,但最终学会适应新环境,明白哭泣无法解决问题,选择坚强面对,这也是个体成长的重要一步。 3. 第三篇作文以小草的形象比喻个人,小草在面对...

    八年级政治下册 第一单元 第二课《哭泣的自然》学案(无答案) 教科版.doc

    这篇文档是针对初中二年级学生的政治课程材料,主题为“哭泣的自然”,旨在教育学生关注环境保护,理解人类活动对自然资源和生态环境的影响。课程设置了明确的学习目标,包括培养学生的价值观、能力以及知识掌握。...

    八年级政治下册 第二课哭泣的自然导学案 教科版.doc

    2. 自然资源现状:教材中提到土地、水、土壤、空气都是人类生存的基础,但当前面临土地荒漠化、水资源短缺、能源匮乏等问题。例如,土地荒漠化是由于人类活动引起的一种环境灾难,而全球人口的增长也加剧了资源压力...

    哭泣的小树作文.doc

    标题“哭泣的小树作文.doc”和描述提示我们这是一篇以环境保护为主题的儿童作文。这篇作文通过拟人化手法,讲述了小树从出生到成长过程中所遭遇的困境,以此揭示了城市环境问题对自然生态的影响。 文章的核心知识点...

    四川省宜宾县复龙八年级政治下册 第二课 哭泣的自然教案 教科版.doc

    第二课《哭泣的自然》是针对八年级政治下册的一课,主要关注环境保护和资源管理。这课通过多个教学环节引导学生深入理解地球资源的枯竭及其对生态系统的影响,培养他们的环保意识和可持续发展观念。 在第一课时,...

    教科版八年级思想品德第二课:哭泣的自然.doc

    【标题】: "教科版八年级思想品德第二课:哭泣的自然.doc" 【主题】: 环境教育与沙尘暴防治 这节课主要围绕环境问题中的沙尘暴现象展开,旨在培养学生的环保意识和解决问题的能力。课程以八年级学生为对象,通过...

    六年级信息技术下册 第四单元 第20课《哭泣的森林》教案 冀教版-冀教版小学六年级下册信息技术教案.docx

    - **背景介绍**:本课程为小学六年级信息技术课程的第四单元第20课,主题为“哭泣的森林”。该课程通过让学生动手实践,利用FrontPage软件创建一个关于森林保护的网站,旨在提升学生的信息技术技能,同时增强他们对...

    鱼的哭泣作文.docx

    8. **生态修复技术**:对于已经被污染的环境,生态修复技术如生物修复、湿地净化等可以用来恢复生态系统,改善水质,让“鱼儿不再哭泣”。 综上所述,尽管文章以作文形式呈现,但其主题——环境保护,与技术紧密...

    CSS3绘制哭泣的猫咪动画特效.zip

    在本资源中,我们主要探讨的是一个利用CSS3来创建哭泣的猫咪动画特效。这个特效是一种生动有趣的网页设计元素,可以吸引用户注意力并增加互动性。CSS3是层叠样式表(Cascading Style Sheets)的第三版,它极大地扩展...

    Bo-Blog 哭泣的女孩

    8. **自定义设置**:Bo-Blog系统通常允许用户自定义头部、底部、菜单等区域,"哭泣的女孩"模板应提供相应的选项,让用户可以根据自己的喜好调整设计。 9. **兼容性**:模板需确保与主流浏览器(如Chrome、Firefox、...

    心理学第四章课后习题.doc

    在心理学第四章的课后习题中,我们探讨了几个关键知识点,主要包括条件反应、学习理论和强化机制。 1. 条件反应分为经典条件反应和操作条件反应。经典条件反应是由俄国生理学家巴甫洛夫提出,通过将中性刺激(S)与...

Global site tag (gtag.js) - Google Analytics