0 0

组件动态化生成5

先说明以下我的思想,首先大家做项目的时候肯定会遇到很多重复的页面,例如有4个模块,分别都有“增删查改”四个功能,一般这样会弄4*4=16个页面分别对应4个模块的增删查改页面,还有4个人页面是对应4个模块的,这样一共就20个页面了,用html肯定需要弄成这么多个页面,但用了EXT后,肯定希望页面越少越好,所以在4个模块的页面就写一个页面,让控制层去生成这4个模块的页面,再写一个页面是增删查改的tempalte,那我再让控制层通过我在动态生成出来的gird组件上的按钮再生成出增删查改的页面,这样就简单很多,而且不需要写那么多重复的代码,但我在用这过程中就出现以下问题,下面是具体分析:





我想用controller去创建view,就是用事件去创建组件,之后用那组件上的按钮再去触发事件再创建新的组件,在第一次触发创建是可以的,但在第二次触创建就没相应了,又不报错。

原本我的第一次触发创建是完全靠事件去创建view的,简略代码如下:

首先我创建一个view叫E的类,E中都是配置一些selType,tbar之类的配置

Ext。defined(‘E’)之后我在控制层在我点解树叶的时候就Ext.create(“E”,{

alias:‘widget。’+childView,

store:childView,

columns:childView,

id:childView

})

childView是我要创建的页面,分别有A,B,C,D四个页面,这样是可以用controller生成出我要的页面,这四个页面都是grid,并且上面是由按钮的,按钮暂时写在E中。在生成childView后,我是想通过childView上的按钮(即是E上写出的按钮tbar)来生成crate,update,load三个页面,但是我这样做我点击childView上的任意一个按钮都没反应,开始怀疑的id问题,我就把原本添加用的id从add改成create,不行,我再怀疑是找不到alias,我就再创建好childView之后alert一下别名,alert出来是widget.childView,后来我又怀疑是我自己弄出来的BUG就把原controller文件删了,再建,还是不行(因为我之前有留言过tabpanel下grid就有一个重复列的bug,后来重新搭建代码基本一样,只是我更优化了代码,就将两个bug消灭了),直到我如下方式才又反应。

我将原本不想自己写得childView都写出来放在view文件夹下

childView都继承E,上面定义的创建E的属性基本不变,变的是将alias和columns写在childView中,这样我通过继承E得到的按钮又有响应了。代码大致如下:

创建子tab的controller

Ext.create(childView,{

store:childView,

id:childView

})

view文件夹下的文件:

Ext.defined(‘A/B/C/D’,{

alias:‘widget。A/B/C/D‘,

columns://略写,

})
  标点符号是不会错得,因为我是方便您看,所有才这样写得,以上的方法我的grid上的按钮是有反应了,但我动态生成的添加,修改页面上的提交按钮没反应了,我想它没反应的原因应该和上面的原因是一样的,但这是什么原因呢,请高手搭救一下我啦


假如看不懂我写什么,我的想法其实就是很简单我的目的就是希望一处代码能多处重用,但对于EXT4.0的MVC真不知怎么下手,求赐教啊
2012年3月27日 14:13

1个答案 按时间排序 按投票排序

0 0

你要弄清楚Ext的继承机制,并且要注意父类上不要放非只读的对象(Object)属性,因为它们可能会被某个实例给修改,导致影响所有的实例。

不正确的方法:

var Child = Ext.extend(Base, {
   hidden : true,
   items : [new A(), new B()]
});


正确的方法:
var Child = Ext.extend(Base, {
   hidden : true,
   initComponent : function(){
      this.items = [new A(), new B()];
      Child.superclass.initComponent.apply(this, arguments);
   }
});



设计方面,你需要换位思考,以复用组件的角度来分析,它需要什么,应该提供什么接口或事件,知道得越少(低耦合),活得越久。

比如你说的一个Grid,上面有修改按钮,以我的想法:
它的列是固定的,这个是份内的事,所以要内部定好columns;
标题可能有变化,这个需要外界传入;
数据URL不确认,需要外界传入;
它有个修改按钮,但它不知道如何处理,所以应该提供一个事件,告诉别人这个按钮被点了,后面要干什么事情让上层去操心;

再对于Controller:
它应该创建一个Grid,并监听它的修改按钮点击事件;
当按钮点击时,它去创建一个Form去修改传出的记录;
……


MVC就是非常经典的低耦合设计,Model什么都不知道,View只盯着Model,Controller只盯着Model和View,只管修改Model。(就像Store、GridView、GridPanel)
在这种设计下,就算要替换一个View,也只用实现这些东西:
盯着Model,把它的数据正确显示出来;(监听Model事件,响应更新)
有操作时知会外面一声;(操作时发出事件)

2012年3月28日 15:59

相关推荐

    用Visual C#动态生成组件

    动态生成组件是指在程序运行时根据需求创建和实例化组件的过程,这通常涉及到反射、元数据和类型构建等高级概念。以下是一些关键知识点: 1. **反射**:反射是.NET框架的核心功能,它允许程序在运行时获取关于自身...

    利用Oracle JAVA 组件动态生成RSS 的方法

    ### 利用Oracle JAVA 组件动态生成RSS 的方法 #### 摘要 随着Web2.0技术的发展,RSS作为一种高效的数据交换规范被广泛应用。本文介绍了一种利用Oracle Java Bean组件动态生成RSS文件的方法,该方法能够有效提高...

    cron(动态生成cron表达式)

    在这个场景中,我们讨论的是一个基于Vue的Cron表达式组件,它允许用户在前端界面中动态生成和配置cron表达式。Vue.js是一个流行的轻量级前端框架,而JavaScript则是Web开发中的主要脚本语言。 这个组件的安装过程...

    Silverlight中Accordion组件动态生成示例

    以下是一些关于如何在Silverlight 4中使用Accordion组件动态生成内容的关键知识点: 1. **组件引入**:首先,你需要在项目中引用System.Windows.Controls.Toolkit库,这个库包含了Accordion组件。通过添加引用,你...

    利用Oracle JAVA组件动态生成RSS的方法.pdf

    ### 利用Oracle JAVA组件动态生成...通过利用Oracle数据库的JAVA组件动态生成RSS文件,不仅能够提高开发效率,减少维护成本,还能显著增强网站的信息传播能力和用户体验,是现代信息化建设中值得推荐和应用的技术方案。

    动态生成菜单组件并示例

    动态菜单可以根据用户的权限、操作环境或者应用状态自动生成,提供个性化的用户界面。本示例将深入讲解如何实现一个动态生成菜单的组件,并结合XML文件进行数据驱动,以实现更灵活的配置。 首先,动态生成菜单组件...

    生成二维码生成二维码生成二维码

    UniApp的组件化设计与Vue.js的理念一致,因此在 UniApp 中实现二维码生成也遵循类似的方法。 要在Vue或UniApp中生成二维码,首先我们需要一个二维码生成库。比如`qrcode.vue`,这是一个专门为Vue设计的二维码组件,...

    动态代码生成器

    8. **自定义化**:动态代码生成器的一大优势是可定制性,用户可以根据项目需求修改或添加模板,生成适合自己项目的代码风格和架构。 9. **版本控制**:生成的代码应当纳入版本控制系统,如Git,以方便团队协作和...

    安卓组件化开发架构,设计思路,代码大全

    在组件化开发中,javapoet可以帮助我们自动化生成接口和实现,减少手动编写重复代码的工作量,提高开发效率。例如,可以使用javapoet来生成组件之间的调用接口,以及对应的实现类。 ARouter是阿里巴巴开源的组件间...

    2022年用Visual C#动态生成组件,请看!(三)Java教程.docx

    在本文档中,我们将探讨如何在2022年使用Visual C#动态生成GUI组件,特别关注一个简单的Java教程。在Windows Forms应用程序中,动态生成组件允许开发者在运行时根据需要创建和添加控件,提供更大的灵活性和交互性。 ...

    基于element组件库封装的动态表单组件

    2. **动态生成**:组件可以根据传入的数据动态生成相应的输入控件,如文本框、选择器、开关等。 3. **验证功能**:提供强大的表单验证功能,可以自定义验证规则,确保用户输入的数据满足业务要求。 4. **表单操作*...

    ASP条形码生成组件,不用DLL简单易用!

    在这个场景下,我们讨论的是一个ASP条形码生成组件,它提供了一种无需使用DLL(动态链接库)的简单方法来在网页上生成条形码。 条形码是商业自动化中广泛使用的数据表示方式,可以快速准确地读取商品信息。在ASP中...

    VUE动态生成word的实现

    通过使用Vue.js框架,开发者可以利用其响应式和组件化的特点,轻松构建出动态的用户界面。结合其他库和API,如axios进行HTTP请求、dayjs进行日期处理等,可以进一步丰富应用的功能。 首先,我们来详细分析一下Vue...

    C#动态生成组件.txt

    根据提供的文件信息,我们可以深入探讨C#中动态生成组件的相关知识点。这主要涵盖了以下几个方面: ### 1. 动态生成组件的意义与应用场景 在软件开发过程中,有时我们需要根据运行时的数据来动态创建用户界面(UI...

    extjs动态生成表格,前台+后台

    在本文中,我们将深入探讨如何使用ExtJS框架在前端动态生成表格,并结合后端数据进行展示。ExtJS是一个强大的JavaScript库,专用于构建富客户端Web应用程序,尤其在创建交互式用户界面方面表现突出。动态生成表格是...

    c++builder动态生成多个按钮

    在C++Builder编程环境中,动态生成控件是一项基础但实用的技术。这主要涉及到Windows API、VCL(Visual Component Library)框架以及C++Builder的Object Pascal语法。本项目以动态生成多个按钮为例,向初学者展示了...

    ASP无组件BMP汉字生成类 汉字点阵库

    在ASP中,无组件BMP汉字生成类是一种技术,它允许开发者在服务器端生成包含汉字的位图(BMP)图像,这对于网页设计、文本处理或者数据可视化等场景非常有用。汉字点阵库则是这种技术的基础,它存储了每个汉字的点阵...

Global site tag (gtag.js) - Google Analytics