Ext JS 4 新特性2:配置项属性(config)之二
Ext JS 4 新特征2:配置项属性config之二
☞ Config(自动的setters和getters)
Ext JS 4介绍了config声明方式,在Ext JS 中也有几个例子;在运行程序的时候,使用setter和getter方法就可以传递一些configuration参数,还可以改变这些参数。当在config声明中定义某某配置项属性的时候,Ext JS 4将会自动地生成与属性紧密相关的4个方法:getter,setter,reset和apply。
让我们在MyApp.MyWindow这个类中看一下如何声明config的,代码如下:
1 Ext.define('MyApp.MyWindow', { 2 extend : 'Ext.Window', 3 width :300, 4 height :200, 5 6 config : { 7 title : '欢迎光临本窗口' 8 }, 9 10 //基于学习,写了一个的applyTitle, 11 applyTitle : function(newtitle) { 12 this.width=50; 13 console.log("调用了applyTitle!"); 14 return newtitle; 15 } 16 });
在代码中,设置这个窗口类的缺省标题是:'欢迎光临本窗口'
到现在需要我们注意的是,在config中只定义了一个title属性,那么Ext框架随之将会为title自动产生了以下的4个方法:
• getTitle: 获取title属性.
• setTitle: 设置新的值到title属性.
• resetTitle: 把title属性恢复到默认值.
• applyTitle: 当你每一次调用setTitle的时候,这个方法同时将被调用。可以用它来做一些自定义处理的东西。
程序继续进行…,当我们建立了'MyApp.MyWindow'类的一个实际窗口后,我们就可以调用这4个方法中的任何一个了:
var win = Ext.create('MyApp.MyWindow');
win.show();
我很遗憾的看到上图这样的结果, 到现在也不知道是什么原因,猜测是默认的窗口类就是这个德行吧!
程序继续修改…,当我在win窗口显示之前调用了setTitle后,看到了一些正常,继续添加了setTitle()方法后的代码,运行的结果如下所示:
…
var win = Ext.create('MyApp.MyWindow');
win.setTitle('我改变了默认的窗口标题');
win.show();
…
按照以前的经验,在调用setTitle的时候,applyTitle应该会在之前被触发的同时调用,但在这里我没有发现这个结果,不知道是什么原因?这就是在下面这段后记的主要内容。
后记:如果我把title略加改变,如atitle;把applyTitle()改为对应的applyAtitle(),这样就完全可以了,而且,效果很好。后来我才注意到,是书本举得这个例子误导了我。在经过多次的测试后,我猜测title这个属性项早被窗口类拥有了,事实确实证明是这样的。本类MyApp.MyWindow是继承了Ext.Window窗口类,如果我把config中的title去掉后,也就是在我们没有任何自定义的config属性项的情况下,仍然去调用win.setTitle(),发现我们还可以改变窗口的标题,这说明title是窗口类的一个早就存在的名称了,这与我想使用config来定义一个新title有冲突,所以说书本上用窗口类后再用一个早已存在的title作为你自己要定义的新属性项是不合适的,因为在后来的代码调用的是原来早就存在setTitle(),和因它而触发的原来早就有的ApplyTitle(),而你自己写的applyTtitle()不能够覆盖系统存在的那个的。所以书本上的这个例子是不恰当的,只是让我更进一部了解点东西。<end-20130718>