ÒÆ»¨½Óľ ʵÀý½²½âExt JS¿Ø¼þµÄÀ©Õ¹
±¾ÎĽéÉÜÁËExtµÄ»ù±¾¸ÅÄîÒÔ¼°À©Õ¹ExtµÄÒ»°ã·½·¨£¬Í¨¹ýÈý¸öÓ¦Óó¡¾°£¬ÏêϸÃèÊöÁËÈçºÎ´ÓÒÑÓеÄExt¿Ø¼þ³ö·¢£¬½è¼øÆäËû¿Ø¼þµÄ¹¦ÄÜ£¬¿ª·¢³öÂú×ãʵ¼ÊÐèÒªµÄпؼþ¡£±¾ÎĵÄÄ¿µÄ£¬Ö¼ÔÚÅ×שÒýÓñ£¬Ï£ÍûÄܸø³õѧExtµÄͬÈÊÃÇÒ»µãÆô·¢ºÍ²Î¿¼£¬¿ª·¢³ö¸ü¶à¡¢¹¦ÄܸüÇ¿´óµÄ×é¼þ¡£
Ext JSÊÇÒ»ÖÖÇ¿´óµÄJavaScript¿â£¬¿ÉÒÔÓÃÀ´¿ª·¢RIA(Rich Internet Applications)£¬Ò²¼´¸»¿Í»§¶ËµÄAjaxÓ¦Óã¬ÊÇÒ»¸öÓëºǫ́¼¼ÊõÎ޹صÄǰ¶ËAjax¿ò¼Ü¡£ Ext JS×ʼ»ùÓÚYUI(Yahoo!UserInterfaceLibrary)¼¼Êõ£¬ÓÉ¿ª·¢ÈËÔ±JackSlocum¿ª·¢£¬Í¨¹ý²Î¿¼JavaSwingµÈ»úÖÆÀ´×éÖ¯¿ÉÊÓ»¯×é¼þ£¬ÎÞÂÛ´ÓUI½çÃæÉÏCSSÑùʽµÄÓ¦Ó㬵½Êý¾Ý½âÎöÉϵÄÒì³£´¦Àí£¬¶¼¿ÉËãÊÇÒ»¸ö·Ç³£ÓÅÐãµÄWeb¿ª·¢¿ò¼Ü¡£
¶ÔÓÚ´ó¶àÊý³ÌÐòÔ±À´Ëµ£¬ÎÒÃÇûÓÐÈκÎÃÀÊõ¹¦µ×£¬¹«Ë¾µÄºÜ¶àÏîĿҲûÓÐÅ䱸ÃÀ¹¤£¬ÒªÏ뿪·¢ÎüÒýÈËÑÛÇòµÄÓû§½çÃæ£¬Ò»Ö±ÒÔÀ´²»ÊÇÒ»¼þÈÝÒ×µÄÊÂÇé¡£µ«ÊÇExtµÄ³öÏÖʹµÃ¿ª·¢ÃÀ¹ÛµÄ½çÃæ±äµÃÈÝÒ×£¬ExtÌṩÁ˱í¸ñ¡¢Ê÷¡¢²¼¾Ö¡¢°´Å¥µÈºÜ¶àÍâ¹ÛѤÀö¡¢¹¦ÄÜÇ¿´óµÄ¿Ø¼þ£¬ÎªÎÒÃǵÄÈÕ³£¿ª·¢¹¤×÷½ÚÔ¼ÁË´óÁ¿µÄʱ¼äºÍ¾«Á¦¡£¸üÖØÒªµÄÊÇÕâ¸ö¿ò¼ÜÊÇÍêÈ«ÃæÏò¶ÔÏóÇÒ¿ÉÀ©Õ¹µÄ£¬Í¨¹ý¶ÔÏÖÓеĿâµÄ¹¦ÄܽøÐÐÐ޸Ļò¼ÓÈëÐµĹ¦ÄÜ£¬À´ÊµÏÖExt¿ò¼ÜÖÐûÓеŦÄÜ¡£
À©Õ¹Ext×é¼þ
À©Õ¹(extension)ÔÚExtÖоÍÊÇÖ¸ÑÜÉúµÄ×ÓÀà¡£¼ÙÉèÎÒÃÇÒѾÓÐÒ»¸ö¸½ÓÐһЩ·½·¨µÄ»ùÀ࣬ÏÖÔÚÓû¼ÓÈëз½·¨¡£ÎÒÃÇ¿ÉÒÔÀûÓÿò¼ÜµÄ¼Ì³ÐÌØÐÔºÍJavaScript´´½¨ÐÂÀàµÄÓïÑÔÌØÐÔ×éºÏеÄÒ»¸öÀà¡£
ExtÌṩÁËÕâÑùµÄÒ»¸öʵÓú¯ÊýExt.extendÔÚExt¿ò¼ÜÖÐʵÏÖÀà¼Ì³ÐµÄ»úÖÆ¡£Õ⸳ÓèÁËÀ©Õ¹ÈκÎJavaScript»ùÀàµÄÄÜÁ¦£¬¶øÎÞÐë¶ÔÀà×ÔÉí½øÐдúÂëµÄÐ޸ģ¬À©Õ¹Ext×é¼þÕâÊǸö½ÏÀíÏëµÄ·½·¨¡£
Òª´ÓÒ»¸öÏÖÓеÄÀà´´½¨³öÒ»¸öÐÂÀ࣬Ê×ÏÈҪͨ¹ýÒ»¸öº¯ÊýÉùÃ÷ÐÂÀàµÄ¹¹ÔìÆ÷£¬È»ºóµ÷ÓÃÐÂÀàÊôÐÔËù¹²ÏíµÄÀ©Õ¹·½·¨¡£ÕâЩ¹²ÏíµÄÊôÐÔͨ³£ÊÇ·½·¨£¬µ«ÊÇÈç¹ûÒªÔÚʵÀýÖ®¼ä¹²ÏíÊý¾Ý£¬Ó¦¸ÃҲһͬÉùÃ÷¡£
JavaScript²¢Ã»ÓÐÌṩһ¸ö×Ô¶¯µÄµ÷Óø¸À๹ÔìÆ÷µÄ»úÖÆ£¬ËùÒÔ±ØÐëͨ¹ýÊôÐÔsuperclassÔÚ¹¹ÔìÆ÷ÖÐÏÔʽµ÷Óø¸Àà¡£µÚÒ»¸ö²ÎÊý×ÜÊÇthis£¬ÒÔ±£Ö¤¹¹ÔìÆ÷¹¤×÷ÔÚµ÷Óú¯ÊýµÄ×÷ÓÃÓò¡£
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Çåµ¥1.À©Õ¹Ext×é¼þµÄ»ù±¾·½·¨
MyNewClass=function(arg1,arg2,etc){ //ÏÔʽµ÷Óø¸ÀàµÄ¹¹Ô캯Êý
MyNewClass.superclass.constructor.call(this,arg1,arg2,etc); };
Ext.extend(MyNewClass,SomeBaseClass,{ myNewFn1:function(){ //etc. },
myNewFn2:function(){ //etc. } });
ʹÓÃʱ£¬ÎÒÃÇÐèҪʵÀý»¯¶ÔÏó£º
15. 16. 17.
Çåµ¥2.ʵÀý»¯ÐµÄ×é¼þ¶ÔÏó
varmyObject=newMyNewClass(arg1,arg2,etc);
ÕÆÎÕÁËÀ©Õ¹Ext×é¼þµÄ»ù±¾·½·¨Ö®ºó£¬ÎÒÃǾͿÉÒÔËæÒâ¹¹ÔìÂú×ãÌØ¶¨ÐèÇóµÄ×é¼þ¡£È»¶øExtÀïÒÑÓеÄ×é¼þºÍʾÀýÓÀÔ¶ÊÇÎÒÃÇȡ֮²»¾¡£¬ÓÃÖ®²»½ßµÄ´´ÔìԴȪ¡£±¾ÎÄÒÔÈý¸öExt×é¼þΪ»ù´¡£¬¡°¼Þ½Ó¡±ÁËÆäËû×é¼þµÄ¹¦ÄÜ£¬ÐγÉÈý¸öеÄ×é¼þ£¬ÊµÏÖÁËÏÖÓÐExt×é¼þûÓеŦÄÜ¡£±¾ÎĵÄÄ¿µÄ£¬Ö¼ÔÚÅ×שÒýÓñ£¬Ï£ÍûÄܸø³õѧExtµÄͬÈÊÃÇÒ»µãÆô·¢ºÍ²Î¿¼£¬¿ª·¢³ö¸ü¶à¡¢¹¦ÄܸüÇ¿´óµÄ×é¼þ¡£
ÒÆProperty GridÖ®»¨½ÓEditorGrid֮ľ
Ê×ÏÈ£¬½éÉÜÒ»ÏÂÎÒÃǵij¡¾°ºÍʵ¼ÊÐèÇó¡£Ä³´óѧҪ½¨ÉèÒ»¸ö½ÌÖ°¹¤¿ÆÑлù½ðµÄ¹ÜÀíϵͳ£¬¸Ãϵͳ¿É¹©»ù½ðÉèÖÃÈËÔ±ÉèÖûù½ðÉêÇëÌõ¼þ¡¢·¢·Å²½ÖèµÈ£¬ÉêÇëÈËÔ±ÌÉêÇëÈËÐÅÏ¢¡¢ÉêÁì»ù½ðµÈ¡£ÕâÀïÒÔ¹¹½¨Ò»¸ö»ù½ðÉêÇëÌõ¼þµÄ×é¼þΪÀý¡£Ìõ¼þÖÆ¶¨ÈËÔ±ÔÚÖÆ¶¨ÉêÇëÌõ¼þʱ£¬¿ÉÒÔËæÒâÌí¼Ó¡¢É¾³ýÉêÇëÌõ¼þ£»¶ÔÓÚijЩÉêÇëÌõ¼þ£¬±ÈÈçԺϵ¡¢ÐÔ±ðµÈÒªÇóϵͳÄÜÌṩԤÏȶ¨ÒåºÃµÄÑ¡ÏÌõ¼þÖÆ¶¨ÈËԱѡÔñ£¬¶ø¶ÔÓÚ±ÈÈçÌØ³¤¡¢ÄêÁäµÈÄÚÈݲ»Ã÷È·µÄ»òÕßÑ¡Ïî¹ý¶àÎÞ·¨ÁоٵÄÇé¿ö£¬ÔòÖ±½ÓÌṩÊäÈë¿ò¹©Ìõ¼þÖÆ¶¨ÈËÔ±ÊäÈë¡£
ΪÁËÓÃExt¹¹½¨ÕâÑùµÄ×é¼þ£¬ÎÒÃÇÊ×ÏÈÏëµ½µÄÊÇÑ¡ÓÃEditorGrid×é¼þ»òÕßProperty Grid×é¼þ¡£EditorGrid£¨¿É±à¼±í¸ñ¿Ø¼þ£©À©Õ¹×ÔGridPanel£¬Ìṩ¶ÔÓÚÑ¡ÖÐÁеĵ¥Ôª¸ñ±à¼¡£¿É±à¼µÄÁÐÊÇͨ¹ýÔÚ±íʾ±í¸ñµÄÁÐÐÅÏ¢µÄÀàExt.grid.ColumnModelÖÐÌí¼ÓeditorÀ´ÊµÏֵġ£µ«ÊÇÕâ¸öeditorÊǶÔÕû¸öÁÐÓÐЧµÄ£¬¾ÍÊÇ˵ÿһÐÐÔÚ¸ÃÁеÄλÖõÄÊý¾ÝµÄ±à¼Æ÷ÊÇÒ»ÑùµÄ¡£
Property Grid(ÊôÐÔ±í¸ñ)À©Õ¹×ÔEditorGridPanel£¬ËùÒÔ¿ÉÒÔÖ±½Ó±à¼ÓÒ±ßÊôÐÔÖµ²¿·ÖµÄÄÚÈÝ¡£µ«ÊÇ£¬Ö»ÊÇÓұߵ쬼´Ê¹Äãµ¥»÷×ó±ßµÄµ¥Ôª¸ñ£¬±à¼Æ÷Ò²Ö»»á³öÏÖÔÚÓұߡ£Êµ¼ÊÉÏ£¬ÎÒÃÇ¿ÉÒÔÓÃÉ¢ÁбíÀ´ÐÎÈÝProperty Grid£¬×ó±ß¿ÉÒÔ¿´×÷key£¬ÓұߵÄÊÇvalue¡£keyÊÇÓÉÎÒÃÇÖ¸¶¨ºÃµÄ£¬Óû§Ö»ÐèÒªÐ޸ĶÔÓ¦µÄvalue¼´¿É¡£
Property GridĬÈÏµÄ±à¼Æ÷°üÀ¨TextField¡¢DateField¡¢NumberFieldºÍComboBox£¬Ò²¾ÍÖ»ÄÜ´¦ÀíÊý×Ö¡¢×Ö·û´®µÄÊäÈëºÍÈÕÆÚµÄÑ¡Ôñ£¬²¼¶ûÖµµÄÑ¡ÔñµÈÒ»°ãµÄÇé¿ö¡£µ±ÎÒÃÇÏë¶Ô±à¼Æ÷½øÐиüÏêϸµÄÅäÖÃʱ£¬¾ÍÐèÒªÓõ½Property GridµÄcustomEditors£¬ÎªÖ¸¶¨idµÄÄÇÐÐÊý¾ÝÉèÖöÔÓ¦µÄ±à¼Æ÷¡£customEditorsºÍsourceµÄÉèÖûù±¾Ò»Ñù£¬Ö»ÐèÒª½«Á½ÕßµÄÊôÐÔÃû³Æ¶ÔÓ¦ÆðÀ´£¬²¢ÇÒΪcustomEditorsÀïµÄËùÓÐÊôÐÔÖ¸¶¨Ò»¸öeditor¡£
Property GridËäÈ»Äܹ»¸ø²»Í¬µÄµ¥Ôª¸ñ¶¨ÖƲ»Í¬µÄ±à¼Æ÷£¬µ«ÊÇÒ»·½ÃæÕâÖÖ±í¸ñÖ»ÓÐÁ½ÁУ¬µÚÒ»Áл¹²»¿É±à¼£¬¶øÇÒ±í¸ñµÄÄÚÈÝ£¨source£©ÐèÒªÊÂÏÈÈ·¶¨£»ÁíÒ»·½Ã涨ÒåcustomEditorsµÄʱºò±ØÐëÖªµÀ±í¸ñµÄÄÚÈÝ£¨source£©£¬¶øÇÒ±ØÐ뽫Á½ÕßµÄÊôÐÔÃû³Æ¶ÔÓ¦ÆðÀ´¡£EditorGridÆäʵÒѾ´ó²¿·ÖÂú×ãÁËÎÒÃǵÄÐèÇó£¬Ö»ÊDz»ÄܶÔÿ¸öµ¥Ôª¸ñ¶¨ÖÆ±à¼Æ÷£¬Ö»ÄÜÖ¸¶¨ÁÐ±à¼Æ÷¡£
¾¹ýÉÏÃæµÄ·ÖÎö£¬µ¥´¿µÄʹÓÃÈκÎÒ»¸ö¿Ø¼þ£¬¶¼ÄÑÒÔ´ïµ½ÎÒÃǵÄÄ¿µÄ¡£Í¬Ê±ÎÒÃÇ·¢ÏÖÎÊÌâÖ÷Òª³öÔÚEditorGridµÄÁÐģʽ£¨ColumnModel£©ÉÏ£¬Property Grid¾ÍÊÇÀ©Õ¹×ÔEditorGrid£¬Í¨¹ý¶ÔÆäColumnModelµÄÀ©Õ¹À´Ö§³Öµ¥Ôª¸ñµÄ±à¼Æ÷¡£ËùÒÔÎÒÃdz¢ÊÔ°ÑEditorGridµÄColumnModelÀ©Õ¹Ò»Ï£¬Ê¹µÃеÄColumnModelÖ§³ÖcustomEditors£¬ÕâÑùÎÒÃǾͻñµÃÁË¶Ô±à¼Æ÷µÄÍêÈ«¿ØÖÆÈ¨£¬¿ÉÒÔ¸ù¾Ý±í¸ñµÄÄÚÈݶ¯Ì¬µÄ¸Ä±äµ¥Ôª¸ñµÄ±à¼Æ÷ÁË¡£Çåµ¥3ÊÇÎÒÃÇΪÂú×ãÉÏÊöÐèÇó¶øÀ©Õ¹µÄÐÂÀàMyColumnModelµÄ²¿·Ö´úÂ룬Çåµ¥4ÊÇʹÓÃMyColumnModel¹¹ÔìÁËÒ»¸öEditorGrid×÷Ϊ»ù½ðÉêÇëÌõ¼þ×é¼þ¡£
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Çåµ¥3.¶¨ÒåÐÂÀàMyColumnModel
Ext.ns('Ext.ux.grid'); //ÐÂÀàMyColumnModelµÄ¹¹Ô캯Êý
Ext.ux.grid.MyColumnModel=function(grid,store,column){ this.grid=grid; this.store=store;
vargender=[ ['0100','ÄÐ'], ['0101','Å®'] ];
vardepartment=[ ['0200','ÎÄѧԺ'], //Ê¡ÂÔ²¿·Ö´úÂë ['0207','ҽѧ²¿'] ];
vartitle=[ ['0300','Öú½Ì'], //Ê¡ÂÔ²¿·Ö´úÂë ['0303','½ÌÊÚ'] ];
23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67.
vargenderCombo=newExt.form.ComboBox({ store:newExt.data.SimpleStore({ fields:['value','text'], data:gender }),
emptyText:'ÇëÊäÈë', mode:'local',
triggerAction:'all', valueField:'value', displayField:'text', readOnly:true });
vardepartmentCombo=newExt.form.ComboBox({ store:newExt.data.SimpleStore({ fields:['value','text'], data:department }),
//ÓëÉÏÃæ¶¨ÒågenderComboÀàËÆ£¬¹ÊÊ¡ÂÔ²¿·Ö´úÂë ¡ });
vartitleCombo=newExt.form.ComboBox({ store:newExt.data.SimpleStore({ fields:['value','text'], data:title }),
//ÓëÉÏÃæ¶¨ÒågenderComboÀàËÆ£¬¹ÊÊ¡ÂÔ²¿·Ö´úÂë ¡ });
//µ±Ñ¡Ôñ¡°ÐԱ𡱡¢¡°ÔºÏµ¡±¡¢¡°Ö°³Æ¡±Ê±£¬ÌṩÏàÓ¦µÄÏÂÀÁбí×÷Ϊµ¥Ôª¸ñ±à¼Æ÷£¬ ¹©Óû§Ñ¡Ôñ£»µ±Ñ¡Ôñ¡°ÄêÁ䡱¡¢¡°ÂÛÎÄÊýÁ¿¡±Ê±£¬ÌṩÊý×ÖÎı¾¿ò¹©Óû§ÊäÈë this.customEditors={
'GENDER':newExt.grid.GridEditor(genderCombo),
'DEPARTMENT':newExt.grid.GridEditor(departmentCombo), 'TITLE':newExt.grid.GridEditor(titleCombo),
'AGE':newExt.grid.GridEditor(newExt.form.NumberField({selectOnFocus:true, style:'text-align:left;'})),
'PAPER':newExt.grid.GridEditor(newExt.form.NumberField({selectOnFocus:true, style:'text-align:left;'})) };
Ext.ux.grid.MyColumnModel.superclass.constructor.call(this,column); };
Ext.extend(Ext.ux.grid.MyColumnModel,Ext.grid.ColumnModel,{ //ͨ¹ý¸²¸Ç¸¸ÀàÖеķ½·¨getCellEditor,ʵÏÖ¸ù¾Ý±í´ïʽÖÐÌõ¼þÁеIJ»Í¬È¡Öµ£¬ Ϊ±í´ïʽµÄÖµËùÔÚµ¥Ôª¸ñ·µ»Ø²»Í¬µÄ±à¼Æ÷
getCellEditor:function(colIndex,rowIndex){
68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
varp=this.store.getAt(rowIndex);
n=p.data.attrName;//¶ÔÓ¦±í´ïʽµÄÌõ¼þÁеÄȡֵ
if(colIndex==4)//±í´ïʽµÄÖµpropertyValueËùÔÚµÄÁÐ {
if(this.customEditors[n]){ returnthis.customEditors[n]; }else{
//Èç¹ûûÓж¨ÒåÌØ¶¨µÄµ¥Ôª¸ñ±à¼Æ÷£¬Ôò·µ»ØÆÕͨµÄÎı¾¿ò±à¼Æ÷ vared=newExt.grid.GridEditor(newExt.form.TextField({ selectOnFocus:true }) );
returned; } } else
returnthis.config[colIndex].editor; } });
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Çåµ¥4.»ù½ðÉêÇëÌõ¼þ×é¼þ
Ext.onReady(function(){ varcomboData1=[ ['AGE','ÄêÁä'], //Ê¡ÂÔ²¿·Ö´úÂë
['DEPARTMENT','Ժϵ'] ];
varcomboData2=[ ['>','´óÓÚ'], //Ê¡ÂÔ²¿·Ö´úÂë ['!=','²»µÈÓÚ'] ];
varcombo1=newExt.form.ComboBox({ id:'attrCombo',
store:newExt.data.SimpleStore({ fields:['value','text'], data:comboData1 }),
emptyText:'ÇëÑ¡Ôñ', mode:'local',
triggerAction:'all',
Ïà¹ØÍÆ¼ö£º