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

如何使用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!
分享到:
评论

相关推荐

    ExtJS4+S2SH+Oracle9i开发电子商业汇票系统

    本教程主要讲述如何利用Struts2,Hibernate,Spring架构来构建企业级应用解决方案,前台用ExtJS展现主要分为两部分完成 第一部分介绍电子商业汇票系统业务。 第二部分,将实际应用(某银行-电子商业汇票系统)为例,...

    信息办公ExtJS 2.2 图书管理系统-bmsh.rar

    标题:探索ExtJS 2.2 图书管理系统:一款适用于毕业与课程设计的高效源码工具在追求高效信息管理和便捷用户操作的今天,基于Web的应用程序已成为软件开发的重要分支。特别是对于在校学生而言,一个功能齐全、界面...

    上传下载ExtJS 2.2 开源网络硬盘系统-dogdisk.rar

    通过分析其源代码,学生可以深入了解如何使用JSP与ExtJS技术协同工作,提升前端与后端开发技能,并掌握构建复杂Web应用的实践经验。综上所述,Dogdisk不仅是一个功能强大的网络硬盘系统,更是一个学习和实践现代Web...

    [信息办公]ExtJS2.2图书管理系统_bmsh.zip

    项目的目标是构建一个高效、可靠、易于维护的Web应用程序。通过使用SSM或SSH框架,可以实现代码的模块化和解耦,提高开发效率和代码质量。MySQL数据库作为数据存储,可以提供稳定的数据存储和快速的数据查询。而JSP...

    [上传下载]ExtJS2.2开源网络硬盘系统_dogdisk.zip

    项目的目标是构建一个高效、可靠、易于维护的Web应用程序。通过使用SSM或SSH框架,可以实现代码的模块化和解耦,提高开发效率和代码质量。MySQL数据库作为数据存储,可以提供稳定的数据存储和快速的数据查询。而JSP...

    spring-extjs-sample

    简单的 spring mvc 应用程序,带有引导皮肤和 extjs 网格组件和嵌入式 H2 数据库。 应用程序由三页组成。 主页以可排序的方式显示所有公司的员工。 其他两个页面显示来自部门 A 和 B 的员工。服务器存储依赖于带有 ...

    基于Spring4+SpringMVC+Hibernate5的燃气进销存管理系统.zip

    ④ 熟练使用 maven 构建工具。 ⑤ 站在企业的角度,试着搭建自己的一个底层基础框架。 ⑥ 建立完整的燃气管进销存管理系统,进行测试并分析结果。 ⑦ 将系统部署到互联网上,以实现真正的 Web 应用。 系统...

    基于ExtJS和SSH的Web应用架构的研究与实现 (2010年)

    为了构建更加动态,响应更加灵敏的Web应用程序,作者对基于AJAX技术的ExtJS框架进行了深入研究,提出了一种新的基于ExtJS+SSH的Web应用架构,极大地提升了Web应用程序的响应速度和用户体验,使服务器更加方便、快捷地和...

    MySQL技术实战开发CRM客户关系管理系统

    由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,...

    GitHub_Gist_API_Demo:使用 Ext JS 构建的演示应用程序,展示了 GitHub Gists API

    该应用程序使用 Ext JS 5.0.1 构建,并使用 Sencha Cmd &#40;5.1.0.26&#41; 搭建脚手架。 因此,原始项目自动生成留下了相当多的样板代码。 GitHub API 根据 Sencha 生态系统的最佳实践和普遍接受的架构,第三方...

    利用Ajax与ExtJS 改善用户体验

    从Ajax原理,ExtJS在OA型系统中的应用及性能调优出发,设计实现了三农电子商城后台管理系统,并探讨了ExtJS在基于B/S结构的OA型电子商务系统中对用户体验的改善。系统界面美观,操作方便,开发效率高,维护规范,...

    Log-viewer-syslog-extjs:系统日志查看 TCC

    sass 构建的支持代码(全局函数、mixin 等)日志/sass/src 此文件夹包含定义与应用程序的 javascript 代码构建中包含的类相对应的 css 规则的 sass 文件。 默认情况下,此文件夹中的文件映射到应用程序的根命名空间...

    个人账户管理系统.zip

     说明:项目采用composer依赖构建,框架采用ZendFramework2,表现层使用ExtJS 4.1.x,ORM采用Propel,项目借鉴J2EE三层设计模式(应用到了Service、DAO,并通过mnapoli/php-di-zf2进行依赖注入以更好的提高可测性)...

    支持桌面和移动的SPA框架RIAEasy.zip

    旨在实现RIA/SPA应用的快速、高质量开发,实现模块化开发,实现移动、桌面系统统一的跨浏览器开发。可以使用RIAStudio在线可视化设计器。 RIAEasy基于webComponent概念设计,包括一整套基础控件,具有良好的运行...

    magnificat-electron:一个使用Ext JS为Electron编写的简单音乐播放器

    壮丽的Magnificat旨在成为具有大量CD收藏的古典音乐发烧友的全功能编目应用程序。 我本打算使用Ext JS在Electron中编写它,但...): Sencha Ext JS 6.2.0 6.5.1+构建工具 6.11以上1.7.6+(通过安装)快速开始 $ git cl

    基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台

    由于富客户端技术进一步扩展浏览器功能,使之提供更加高效和友好的用户接口,越来越多的企业和开发人员选择使用富客户端技术构建商业应用,本课程主要是介绍了解最流行的富客户端框架jquery - easyUI API及熟悉掌握...

    sencha-wysiwyg-editor:Sencha WYSIWYG编辑器,可让您编辑应用程序视图,源代码等-Source code editor

    选择一个框架/工具包(经典或现代)来构建您的ExtJS应用程序。 选择您的主题。 选择您的设备布局。 从基于模板的入门视图包中进行选择。 使用WYSIWYG编辑器直观地设计和创建视图: 工具箱(组件托盘): 可...

    基于MVCS模式的组件化手机Web前端的研究与应用

    本文以MVC模型为架构,ExtJS组件为基础,数据存储(Store)为数据容器,构建了MVCS (Model-View-Controller-Store)模型,并以书籍信息系统为例,说明使用该模型完成组件化手机Web前端设计的方法和实现步骤,展示了...

    gisapp:扩展QGIS Web客户端

    它将QGIS项目转换为带有查看,导航,搜索和打印数据的工具的Web和Mobile GIS应用程序。 最重要的是,还有一个PostgreSQL管理数据库,用于存储项目,层,用户以及一些不在QGIS项目中的特定设置。 数据库管理和项目...

    BAMS-JAVA快速开发框架 2.5

    BAMS 2.5 更新日志:2015-07-091、修复了日志无法输出的BUG,增加slf4j lo4j绑定,删除commons-logging,统一通过slf4j使用log4j2、更新 Excel的导入导出功能,使用SpingMVC代替Servlet接收请求,简化代码3、将Word...

Global site tag (gtag.js) - Google Analytics