JS小练习代码之二

  相关的源代码如下:

  1.beginFormPanel.js(作用:外层html文件中表单的展现)

  <script>

  var beginFormPanel = Ext.extend(Ext.form.FormPanel,{

  constructor:function()

  {

  beginFormPanel.superclass.constructor.call

  (

  this,

  {

  title:"myForm(绝不裸奔)",

  width:418,

  height:180,

  frame:true,

  labelWidth:45,

  style:"margin-left:250px",

  defaultType:"textfield",

  defaults:{anchor:"95%"},

  items:

  [

  {

  fieldLabel:"姓名",

  name:"name"

  },

  {

  fieldLabel:"年龄",

  name:"age"

  },

  {

  fieldLabel:"性别",

  name:"sex"

  },

  {

  fieldLabel:"住址",

  name:"addr"

  }

  ],

  buttons:

  [

  {

  text:"添加"

  },

  {

  text:"修改"

  },

  {

  text:"删除"

  }

  ],

  renderTo:Ext.getBody()

  }

  ) ;

  }

  }) ;

  </script>

  2.beginPanel.js(作用:GridPanel与窗口以及窗口中FormPanel的实现)

  <script>

  /**************************** FormPanel *****************************************************/

  var myWindowForm = Ext.extend(Ext.form.FormPanel,{

  constructor:function()

  {

  myWindowForm.superclass.constructor.call

  (

  this,

  {

  labelWidth:45,

  defaultType:"textfield",

  defaults:{anchor:"93%"},

  style:"padding:5px",

  baseCls:"x-plain",

  items:

  [

  {

  fieldLabel:"姓名",

  name:"name",

  allowBlank:false,

  blankText:"姓名不能够为空!"

  },

  {

  fieldLabel:"年龄",

  name:"age",

  allowBlank:false,

  vtype:"age",

  blankText:"年龄不能够为空!"

  },

  {

  fieldLabel:"性别",

  name:"sex",

  allowBlank:false,

  blankText:"性别不能够为空!"

  },

  {

  fieldLabel:"住址",

  name:"addr",

  allowBlank:false,

  blankText:"住址不能够为空!"

  }

  ]

  }

  ) ;

  },

  getValues:function()

  {

  if(this.getForm().isValid())

  {

  return new Ext.data.Record(this.getForm().getValues()) ;

  }

  else

  {

  throw error("表单验证没通过哦!") ;

  }

  },

  setValues:function(record)

  {

  this.getForm().loadRecord(record) ;

  },

  reset:function()

  {

  this.getForm().reset() ;

  }

  }) ;

  /******************************** Window ***********************************/

  var myWindow = Ext.extend(Ext.Window,{

  form:new myWindowForm(),

  constructor:function()

  {

  myWindow.superclass.constructor.call

  (

  this,

  {

  title:"myWindow(绝不裸奔)",

  width:300,

  height:185,

  frame:true,

  plain:true,

  modal:true,

  items:this.form,

  closable:false,//禁止关闭

  collapsible:true,//可折叠

  buttons:

  [

  {

  text:"确定",

  handler:this.onSubmitClick,

  scope:this

  },

  {

  text:"取消",

  handler:this.onCancelClick,

  scope:this

  }

  ]

  }

  ) ;

  this.addEvents("submit") ;

  },

  close:function()

  {

  this.hide() ;

  },

  onSubmitClick:function()

  {

  /*

  try

  {

  this.fireEvent("submit",this,this.form.getValues()) ;

  }

  catch (error)

  {

  Ext.Msg.alert("警告","请将需要填写的信息填写完整!") ;

  }

  */

  this.fireEvent("submit",this,this.form.getValues()) ;

  this.close() ;

  },

  onCancelClick:function()

  {

  //上面不加scope属性则提示this.form为空

  this.form.reset() ;

  this.close() ;

  }

  }) ;

  /************************** GridPanel **************************************/

  var beginMyPanel = Ext.extend(Ext.grid.GridPanel,{

  insertWin:new myWindow(),

  constructor:function()

  {

  //this.insertWin = new myWindow() ;

  var myData =

  [

  ["th","91","非女","地球"],

  ["thtwin","92","男","地球"],

  ["thtwinj2ee","93","非女","地球"],

  ["thj2ee","94","男","地球"],

  ["thtwin","95","非女","地球"]

  ] ;

  var myRecord = Ext.data.Record.create

  (

  ["name","age","sex","addr"]

  ) ;

  var myColumn = new Ext.grid.ColumnModel

  (

  [

  {header:"姓名",dataIndex:"name"},

  {header:"年龄",dataIndex:"age"},

  {header:"性别",dataIndex:"sex"},

  {header:"住址",dataIndex:"addr"}

  ]

  ) ;

  var myStore = new Ext.data.Store

  (

  {

  proxy:new Ext.data.MemoryProxy(myData),

  reader:new Ext.data.ArrayReader

  (

  {},

  myRecord

  )

  }

  ) ;

  beginMyPanel.superclass.constructor.call

  (

  this,

  {

  title:"myGridPanel(thtwinj2ee)",

  frame:true,

  width:418,

  height:250,

  cm:myColumn,

  ds:myStore,

  style:"margin:20,0,10,250",

  tbar:

  [

  {

  text:"添加人员",

  handler:function()

  {

  this.insertWin.show() ;

  },

  scope:this

  },

  "-",//得到的结果为:|

  {text:"修改人员"},

  "-",

  {text:"删除人员"}

  ],

  selModel:new Ext.grid.RowSelectionModel

  (

  {

  listeners:

  {

  "rowselect":

  {

  fn:function(row,index,record)

  {

  this.setTitle("修改之后的GridPanel的名字!") ;

  //注意下面的这句 ***** 1 ******

  this.fireEvent("rowselect",record) ;

  },

  scope:this

  }

  }

  }

  ),

  renderTo:Ext.getBody()

  }

  ) ;

  myStore.load() ;

  //注意下面这句 ***** 2 ******

  this.addEvents("rowselect") ;

  this.insertWin.on("submit",this.onInsertWinSubmit,this) ;

  },

  insert:function(myRecord)

  {

  this.getStore().add(myRecord) ;

  },

  onInsertWinSubmit:function(insertWin,myRecord)

  {

  this.insert(myRecord) ;

  }

  }) ;

  </script>

  3.静态html页面的表现

  <html>

  <head>

  <title></title>

  <link rel="stylesheet" type="text/css" href="../AllRes/resources/css/ext-all.css"/>

  <script type="text/javascript" src="../AllRes/adapter/ext/ext-base.js"></script>

  <script type="text/javascript" src="../AllRes/ext-all.js"></script>

  <script type="text/javascript" src="beginPanel.js"></script>

  <script type="text/javascript" src="beginFormPanel.js"></script>

  <script>

  Ext.onReady(function(){

  Ext.QuickTips.init() ;

  Ext.form.Field.prototype.msgTarget="side" ;

  Ext.apply(Ext.form.VTypes,{

  "age":function(value)

  {

  //此处用正则表达式要使

  if(/^\d+$/.test(value))

  {

  return true ;

  }

  return false ;

  },

  "ageText":"请输入正确的年龄!"

  }

  ) ;

  /* var newnewMyWindowForm = new myWindowForm() ;

  newMyWindowForm.render(Ext.getBody()) ;

  */

  // var newnewMyWindow = new myWindow() ;

  // newMyWindow.show() ;

  var myGridPanel = new beginMyPanel() ;

  var myForm = new beginFormPanel() ;

  //注意下面这句与***** 1 ****** 和 ***** 2 ******的关系

  myGridPanel.on

  (

  "rowselect",

  function(selectedRow)

  {

  this.getForm().loadRecord(selectedRow) ;

  },

  myForm

  ) ;

  }) ;

  </script>

  </head>

  <body>

  </body>

  </html>