`
adamed
  • 浏览: 183864 次
社区版块
存档分类
最新评论

如何使用ExtJS构建应用系统3

阅读更多
原文地址:http://blog.extjs.eu/know-how/writing-a-big-application-in-ext-part-3/

Writing a Big Application in Ext (Part 3)
14. March 2009 – 14:53 Important
If you have not already done so, study Writing a Big Application in Ext (Part 1) and Writing a Big Application in Ext (Part 2)before you read this article. It would be very hard, if not impossible, to understand concepts explained here before you fully understand the first and second part.

Introduction
Helping on the forum and reading code of others that failed to extend Ext classes, revealed more errors that users, especially beginners, commonly make. Therefore, I’ve decided to start this article that will collect these errors and will explain why the errors are errors. I mean it as loosely ended as I may discover more errors and ways of avoiding them so I plan just to add them to this article, not endlessly create parts 4, 5, etc…

… continued: Most Common Sources of Troubles
Here we go:

1.Unnecessary Extending
2.Adding Objects to Prototype
3.Hard Coding ids


Unnecessary Extending
The main reasons for extending are:

•re-usability
•adding functionality
•combination of them
so we extend if we need a re-usable component or we need to add a functionality (new methods) or both. If we are after re-usability the extension can be as simple as:

 MyPortlet = Ext.extend(Ext.Panel, {
     anchor:'100%'
    ,draggable:true
    ,defaultType:'mygraph'
}); 

You see what happens? We are going to use MyPortlet many times so instead of scatter the above configuration in 10,000 lines application code 100 times, we create this simple extension and we save 297 lines of code.

The other aspect is that if we upgrade our ‘mygraph’ to ‘mygraph_new’ the only place where to change it is our extension saving us searching out code for all occurrences of ‘mygraph’ (100 times) and replacing it with ‘mygraph_new’ 100 times.

(Well, 100 is exaggerated, but you get the point, right?)

If we are after adding functionality, which can be also simple, we add some “logic”:

 MyPanel = Ext.extend(Ext.Panel, {
    onRender:function() {
        MyPanel.superclass.onRender.apply(this, arguments);
        alert('Rendered');
    }
}); 

Here we add some logic to Panel, it does more that it did before.

There is no need to extend in all other cases.



Adding Objects to Prototype
Run this code first:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css">
  <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
  <script type="text/javascript" src="ext/ext-all-debug.js"></script>
  <title id="page-title">Extending Error: Object in prototype</title>
  <script type="text/javascript">
  Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
  Ext.onReady(function() {
    MyPanel = Ext.extend(Ext.Panel, {
         layout:'fit'
        ,panelConfig: {
            bodyBg:'red'
        }
 
        ,initComponent:function() {
            var config = {
                bodyStyle:'background-color:' + this.panelConfig.bodyBg
            }; // eo config object
 
            // apply config
            Ext.apply(this, Ext.apply(this.initialConfig, config));
 
            MyPanel.superclass.initComponent.apply(this, arguments);
        } // eo function initComponent
 
        ,applyBackground:function(color) {
            this.panelConfig.bodyBg = color;
            this.body.applyStyles({'background-color':color});
        } // eo function applyBackground
 
    }); // eo extend
 
    var p1 = new MyPanel({
         title:'Panel with Blue Background'
        ,renderTo:Ext.getBody()
        ,width:240
        ,height:160
    });
 
    p1.applyBackground('blue');
 
    var p2 = new MyPanel({
         title:'Panel with Red Background'
        ,renderTo:Ext.getBody()
        ,width:240
        ,height:160
    });
 
  });
  </script>
</head>
<body></body>
</html>


What do we expect? It is written in titles of panels: Top panel (p1) should have blue body background because we set it to it after it is created. And bottom panel (p2) should have red because we just create default MyPanel.

But it is blue too!!! Why? The reason is simple: panelConfig is object that is created during class definition and it is added to MyPanel prototype. Objects (arrays too) are accessed by reference so p1 and p2 share the same instance of panelConfig. Setting bodyBg property in applyBackground method changes this single instance of panelConfig object. So we create p2 with blue background too.

You see, here it is clearly and immediately visible that something went wrong but making this error can lead to weeks of wasted debugging time in real applications. Imagine you have a store in prototype…



Hard Coding ids
Very simple, but deadly mistake is to set ids in the extension either to the main extension object or on its items, toolbars, buttons, etc. If a hard coded ids are set we cannot create two or more instances of our extension, can we?

Loose End
That’s all for now but if I discover more errors I will add them above.

Stay tuned!
分享到:
评论

相关推荐

    extjs做的一个桌面应用系统

    EXTJS是一种基于JavaScript的...综上所述,EXTJS和DWR结合使用,可以构建出高度交互、用户体验良好的桌面应用系统。开发者需要对这两项技术有深入理解,才能充分利用它们的优势,打造出功能齐全、性能卓越的Web应用。

    ExtJs3 演示系统

    ExtJs3是一个强大的JavaScript框架,主要用于构建富客户端的Web应用程序。...通过分析和研究这个系统,开发者可以掌握如何使用ExtJs3构建复杂且功能丰富的前端应用,并为实际项目提供有价值的参考。

    extjs仿桌面系统

    EXTJS是一种基于JavaScript的富客户端应用开发框架,由Sencha公司...通过熟练掌握EXTJS,开发者可以创建出具有高度交互性和用户友好性的Web应用程序,即使是在浏览器环境中,也能提供近似于桌面操作系统的使用感受。

    使用ExtJs构建树形菜单功能

    ### 使用ExtJs构建树形菜单功能详解 #### 一、引言 在现代Web应用程序开发中,树形菜单是一项常用且重要的功能。它能够帮助用户更直观地理解数据层次关系,尤其是在展示组织架构、文件系统或者任何有层级结构的...

    使用Extjs写的简单酒店管理系统

    【标题】:使用Extjs构建的简易酒店管理系统 在IT行业中,开发用户界面时经常会用到JavaScript库,其中ExtJS是一个强大的前端框架,用于构建功能丰富的、交互式的Web应用程序。本项目“使用Extjs写的简单酒店管理...

    Extjs酒店管理系统

    在"Extjs酒店管理系统"中,这一技术被充分利用,构建出直观且易于操作的界面。通过Extjs,开发者能够轻松创建数据驱动的网格、表单、菜单、工具栏等,极大地提高了系统的交互性和用户体验。此外,Extjs 2.0支持AJAX...

    ExtJs教学管理系统

    "ExtJs教学管理系统"是一个基于ExtJs框架和.Net后端技术构建的应用程序,旨在提供一套教育机构或学校使用的教学管理解决方案。此系统可能包括学生管理、课程管理、成绩管理、教师管理等多个模块,以帮助教育工作者...

    ExtJS Web应用程序开发指南(第2版).pdf 高清下载

    3. **参考案例研究**:网上有许多使用ExtJS构建的真实案例,通过分析这些案例,可以学到很多实战经验和技巧。 4. **参与社区讨论**:加入ExtJS的社区论坛或社交媒体群组,与其他开发者交流心得,解决遇到的问题。 ...

    ExtJS 物流管理系统源代码

    1. ExtJS:ExtJS是一个强大的JavaScript库,用于构建富互联网应用程序(RIA)。它提供了丰富的组件模型,包括表格、面板、表单、树等,可以创建复杂的用户界面。在物流管理系统中,ExtJS可能用于构建交互式的数据...

    ExtJS Web应用程序开发指南(第2版).zip

    ExtJS是一种基于JavaScript的开源富客户端框架,专用于构建交互式和桌面级的Web应用程序。在《ExtJS Web应用程序开发指南(第2版)》中,开发者可以深入了解如何利用这个强大的框架来创建功能丰富的Web应用。这本书...

    jsp extjs Efs管理系统

    **JSP与EXTJS在EFS管理系统的应用** 在IT领域,JSP(JavaServer Pages)和EXTJS是两种常用的技术,它们在构建Web应用程序时发挥着重要作用。本项目"jsp extjs Efs管理系统"结合了这两者的优点,提供了一个完整的、...

    Extjs文件管理系统

    ExtJS 文件管理系统是一款基于 ExtJS 框架构建的高效、功能丰富的文件管理应用程序。它提供了用户友好的界面,使得用户能够轻松地进行文件的压缩、解压以及搜索操作。ExtJS 是 Sencha 公司推出的一个强大的 ...

    extjs信息系统extjs信息系统

    EXTJS是一种基于JavaScript的开源富客户端框架,专用于构建企业级Web应用程序。它提供了一套完整的组件库,包括数据网格、表单、图表等,使得开发者可以构建出交互性强、用户体验良好的网页应用。EXTJS信息系统显然...

    合同管理系统 extjs开发的 让大家一起学习

    本系统采用EXTJS进行前端开发,EXTJS是一款强大的JavaScript组件库,以其丰富的UI组件和数据绑定机制,为开发高质量的Web应用提供了便利。 EXTJS的核心特性包括: 1. **组件化设计**:EXTJS以组件为中心,提供了...

    EXTJS图书管理系统页面(JAVA)

    EXTJS是一种基于JavaScript的开源富客户端框架,专用于构建交互式、数据驱动的Web应用程序。在"EXTJS图书管理系统页面(JAVA)"这个项目中,我们主要关注的是EXTJS在图书管理系统中的应用,以及它与Java后端的交互。...

    extjs做的图书管理系统

    本文将详细介绍一个使用ExtJS开发的图书管理系统,该系统同时结合了Spring和iBATIS作为其核心架构组件。 首先,ExtJS是一个流行的JavaScript库,用于构建桌面级的Web应用程序。它提供了丰富的UI组件,如表格、窗口...

    Extjs版酒店管理系统

    本文将深入探讨一款名为"Extjs版酒店管理系统"的软件,它利用Visual Studio 2005(VS2005)、SQL Server 2000以及Extjs 2.0技术构建,旨在为酒店业提供全面、便捷的信息化解决方案。 首先,让我们关注该系统的开发...

    基于ExtJS做的投票系统

    ExtJS是一个强大的JavaScript库,专为构建富客户端应用程序而设计。在投票系统中,它用于创建交互式和动态的用户界面: 1. **组件模型**:ExtJS提供了丰富的组件库,如表格、面板、窗口、按钮等,方便快速构建复杂...

    基于ExtJS的通用后台管理系统

    ExtJS是一种强大的JavaScript库,专用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,包括数据网格、图表、表单、导航视图等,能够帮助开发者构建功能丰富的、交互性强的用户界面。在这个基于ExtJS的通用...

    extjs4_任务调度管理系统

    EXTJS4是一款强大的JavaScript前端框架,它提供了丰富的UI组件和交互模式,被广泛应用于构建功能完善的Web应用程序,特别是对于企业级的管理系统的开发,EXTJS4更是表现出色。本文将深入探讨如何利用EXTJS4开发任务...

Global site tag (gtag.js) - Google Analytics