extjs 类继承的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了extjs 类继承的问题相关的知识,希望对你有一定的参考价值。

_window = Ext.extend(Ext.Window ,
constructor : function()
_window.superclass.constructor.call(this ,
title : "title1"
)

);

win7 = Ext.extend(_window , title : "title2");

win7类不能重写_window类的title,为什么呢?
win7里面用win7.superclass.constructor.call(this , title:"title2")
也不行。
win7.superclass.constructor.call(this , title:"title2")
查了下资料,好像这句话的意义是 win7调用它父类的constructor方法(相当于函数),并向constructor方法传递参数title : "title2"

但是这里父类的constructor方法的function()中没有参数接口,也就是没有function(arguments)这样的形式,所以我那不行。

这问题我知道如何处理,但是思想上还是有些模糊。我现在的理解为其实构造函数里面的都只是函数的配置项,根本不是成员方法或成员属性,所以应该根本就不存在重写不重写了。
先暂时这样理解了,头都弄的有点晕了。

_window = Ext.extend(Ext.Window ,
title:"title1",
constructor : function()
_window.superclass.constructor.call(this)

);

win7 = Ext.extend(_window , title : "title2");

这样,你试试
win7是继承_window的,这样在程序执行时先执行win7的构造函数,再执行_window的构造函数,你把title的赋值写在了_window的构造函数里面了。这样的话无论win7初始化时怎么赋值,window的title值都会是title1
参考技术A 你直接这样用试试看
Ext.extend(win7,_window , title : "title2");

无废话ExtJs 入门教程二十一[继承:Extend]

extjs技术交流,欢迎加群(201926085)程序员俱乐部-ExtJs(5群)

在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性。而这些属性可以通过“继承”定义在我们定义的新组件中,从而达到重用的目地。

1.代码如下:

复制代码
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4     <title></title>
  5     <!--ExtJs框架开始-->
  6     <script type="text/javascript" src="/Ext/adapter/ext/ext-base-debug.js"></script>
  7     <script type="text/javascript" src="/Ext/ext-all-debug.js"></script>
  8     <link rel="stylesheet" type="text/css" href="/Ext/resources/css/ext-all.css" />
  9     <!--ExtJs框架结束-->
 10     <script type="text/javascript">
 11         Ext.onReady(function () {
 12             //----------------继承前开始---------------//
 13             var Panel1 = new Ext.Panel({
 14                 title: \'标题\',
 15                 width: 500,
 16                 height: 100,
 17                 html: \'好好学习\'
 18             });
 19             var Panel2 = new Ext.Panel({
 20                 title: \'标题\',
 21                 width: 500,
 22                 height: 100,
 23                 html: \'天天向上\'
 24             });
 25             //----------------继承前结束---------------//
 26             //----------------继承后开始---------------//
 27             var MyPanel = Ext.extend(Ext.Panel, {
 28                 title: \'标题\',
 29                 width: 500,
 30                 height: 100
 31             });
 32             var MyPanel1 = new MyPanel({
 33                 html: \'好好学习\'
 34             });
 35             var MyPanel2 = new MyPanel({
 36                 html: \'天天向上\'
 37             });
 38             //----------------继承后结束---------------//
 39             //定义新的类FormPanel,并且把变化的属性暴露出来以便以后继承
 40             var MyFormPanel = Ext.extend(Ext.form.FormPanel, {
 41                 title: \'属性外露\',
 42                 width: 500,
 43                 labelWidth: 80,
 44                 initComponent: function () {
 45                     this.items = [{
 46                         xtype: \'textfield\',
 47                         fieldLabel: \'姓名\',
 48                         id: this.usernameid,//变化的部份
 49                         name: \'username\',
 50                     }];
 51                     this.buttons = [{
 52                         text: \'确 定\',
 53                         handler: this.submit,//变化的部份
 54                         scope: this
 55                     }, {
 56                         text: \'取 消\',
 57                         handler: this.cancel,//变化的部份
 58                         scope: this
 59                     }];
 60                     MyFormPanel.superclass.initComponent.call(this, arguments); //调用父类的initComponent
 61                 }
 62             });
 63             //创建测试对象1
 64             var testForm1= new MyFormPanel({
 65                 usernameid:\'username\',
 66                 submit: function () {
 67                     alert(Ext.getCmp(\'username\').getValue());
 68                 },
 69                 cancel: function () {
 70                     testForm1.getForm().reset();
 71                 }
 72             });
 73             //创建测试对象2
 74             var testForm2=new MyFormPanel({
 75                 title: \'覆盖属性\',
 76                 usernameid:\'usernameid\',
 77                 submit: function () {
 78                     alert(this.usernameid);
 79                 },
 80                 cancel: function () {
 81                     testForm2.getForm().reset();
 82                 }
 83             });
 84             //创建窗体
 85             var win = new Ext.Window({
 86                 title: \'窗口\',
 87                 id: \'window\',
 88                 width: 500,
 89                 height: 620,
 90                 resizable: true,
 91                 closable: true,
 92                 maximizable: true,
 93                 minimizable: true,
 94                 items: [Panel1, Panel2, MyPanel1, MyPanel2, testForm1,testForm2]
 95             });
 96             win.show();
 97         });
 98     </script>
 99 </head>
100 <body>
101     <!--
102 说明:
103 (1)var MyPanel = Ext.extend(Ext.Panel, {
104                 title: \'标题\',
105                 width: 500,
106                 height: 100
107             });
108     Ext.extend 用来继承已有的类 这里给 title,width,height加上了默认值
109     第12行至37行,简单介绍了组件的继承,如:平时我们在用MessageBox.show()时,一般会有4种情况,“成功”,“失败”,“出错”,“确认”。。
110     我们通过简单的继承,就可以把这4类文本框封装的很好,每次使用时new我们的新类即可。
111 (2)第38--82行,我做了个组件套用子组件的例子,给组件附加子组件须在 initComponent: function () {} 初始化组件时加入,
112     并且在完成后,还要显示的调用  MyFormPanel.superclass.initComponent.call(this, arguments); //调用父类的initComponent
113     我们在开发中,常会用到 GridPanel,会定义分页组件,按钮等,经过这个实例,我们可以在把原有的 GridPanel再包一层,以保证软件中的“单一原则”。
114     其中变化的部分我们可以通过定义新属性把他外露出来。如上例所示。
115 -->
116 </body>
117 </html>
复制代码

2.效果如下:

无废话extjs教程

转载请注明出处:http://www.cnblogs.com/iamlilinfeng

活到老,学到老,练到老...

以上是关于extjs 类继承的问题的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 4.1.1 |为啥`view`和`this`在继承类的事件处理函数中不同

EXTJS4自学手册——EXT基本方法属性(mixins多继承staticsrequire)

Extjs 多重继承?

模拟 extjs 底层继承

extjs6学习笔记1.9 初始: Mixins

c++ 虚继承