EXT4.2--Ext Designer 使用


前言:

“畫EXT”是一個美好的想法,如果有一款可視化工具能夠只需進行拖拽而設計EXT,生成代碼--那真是一件美麗的事。然而現實是,即使是為Eclipse裝上EXT插件,用上idea,手寫代碼的提示也只是聊以安慰而已。Ext Designer是官方出的一款可視化設計EXT的工具,用來通過鼠標拖拽設計EXT,雖然設計滯后明顯,但閑時倒騰幾番對於EXT的理解和學習也是有幫助的。

下面筆者將演示2個示例來說明該工具的基本用法。

其中涉及到重要點包括:運用Ext Designer 創建項目,導出js源碼,設計中重要步驟。最后以idea工具在項目中顯示。

 

示例一:

 

Ext Designer 設計圖

 

設計中重要點:

布局:Form Panel 的布局為column (MyForm);Panel的布局為form(MyPanel). 布局決定了組件如何顯示,因此十分重要。

border:MyForm下面的第一級子組件為Panel,它的默認border是顯示的--雖然你第一次看到下面的border屬性會疑惑我沒有勾選怎么還有顯示?--沒關系,你再點一次就發現沒有了。

columnWidth:既然布局為column,那么子組件有一個屬性--columnWidth是必備配置項,如下:

 

生成/導出代碼:

保存到指定目錄,便導出了js代碼

 

保存項目:

設計完成,如下所示保存項目到指定目錄下次可直接打開。

 

這里是原始代碼:

Ext.MyViewport=Ext.extend(Ext.Viewport ,{
xtype:"viewport",
    initComponent: function(){
        this.items=[
            {
                xtype:"form",
                title:"我的表單",
                labelWidth:100,
                labelAlign:"left",
                layout:"column",
                bodyBorder:false,
                maskDisabled:false,
                border:false,
                items:[
                    {
                        xtype:"panel",
                        title:"",
                        layout:"form",
                        border:false,
                        columnWidth:0.3,
                        items:[
                            {
                                xtype:"textfield",
                                fieldLabel:"姓名",
                                anchor:"100%"
                            }
                        ]
                    },
                    {
                        xtype:"panel",
                        title:"",
                        layout:"form",
                        bodyBorder:false,
                        animCollapse:false,
                        border:false,
                        columnWidth:0.3,
                        items:[
                            {
                                xtype:"textfield",
                                fieldLabel:"性別",
                                anchor:"100%"
                            }
                        ]
                    },
                    {
                        xtype:"panel",
                        title:"",
                        layout:"form",
                        border:false,
                        columnWidth:0.3,
                        items:[
                            {
                                xtype:"textfield",
                                fieldLabel:"戶籍",
                                anchor:"100%"
                            }
                        ]
                    },
                    {
                        xtype:"panel",
                        title:"",
                        layout:"form",
                        border:false,
                        columnWidth:0.3,
                        items:[
                            {
                                xtype:"datefield",
                                fieldLabel:"出生日期",
                                anchor:"100%"
                            }
                        ]
                    },
                    {
                        xtype:"panel",
                        title:"",
                        layout:"form",
                        border:false,
                        columnWidth:0.3,
                        items:[
                            {
                                xtype:"datefield",
                                fieldLabel:"入職日期",
                                anchor:"100%"
                            }
                        ]
                    }
                ]
            }
        ]
        Ext.MyViewport.superclass.initComponent.call(this);
    }
})

 

現在用idea來顯示吧

如下所示:(注:因為是Viewport,所以無需以renderTo配置項渲染頁面指定的dom,只需var port = new Ext.MyViewport(); 即可顯示。

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2016/2/21
  Time: 4:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
  <link rel="stylesheet" type="text/css" href="Extjs4.2/resources/css/ext-all-neptune-rtl.css">
  <script type="text/javascript" src="Extjs4.2/ext-all.js"></script>
  <script type="text/javascript" src="Extjs4.2/locale/ext-lang-zh_CN.js"></script>
  <script type="text/javascript">
      Ext.onReady(function(){
          Ext.MyViewport=Ext.extend(Ext.Viewport ,{
              xtype:"viewport",
              initComponent: function(){
                  this.items=[
                      {
                          xtype:"form",
                          title:"我的表單",
                          labelWidth:100,
                          labelAlign:"left",
                          layout:"column",
                          bodyBorder:false,
                          maskDisabled:false,
                          border:false,
                          items:[
                              {
                                  xtype:"panel",
                                  title:"",
                                  layout:"form",
                                  border:false,
                                  columnWidth:0.3,
                                  items:[
                                      {
                                          xtype:"textfield",
                                          fieldLabel:"姓名",
                                          anchor:"100%"
                                      }
                                  ]
                              },
                              {
                                  xtype:"panel",
                                  title:"",
                                  layout:"form",
                                  bodyBorder:false,
                                  animCollapse:false,
                                  border:false,
                                  columnWidth:0.3,
                                  items:[
                                      {
                                          xtype:"textfield",
                                          fieldLabel:"性別",
                                          anchor:"100%"
                                      }
                                  ]
                              },
                              {
                                  xtype:"panel",
                                  title:"",
                                  layout:"form",
                                  border:false,
                                  columnWidth:0.3,
                                  items:[
                                      {
                                          xtype:"textfield",
                                          fieldLabel:"戶籍",
                                          anchor:"100%"
                                      }
                                  ]
                              },
                              {
                                  xtype:"panel",
                                  title:"",
                                  layout:"form",
                                  border:false,
                                  columnWidth:0.3,
                                  items:[
                                      {
                                          xtype:"datefield",
                                          fieldLabel:"出生日期",
                                          anchor:"100%"
                                      }
                                  ]
                              },
                              {
                                  xtype:"panel",
                                  title:"",
                                  layout:"form",
                                  border:false,
                                  columnWidth:0.3,
                                  items:[
                                      {
                                          xtype:"datefield",
                                          fieldLabel:"入職日期",
                                          anchor:"100%"
                                      }
                                  ]
                              }
                          ]
                      }
                  ]
                  Ext.MyViewport.superclass.initComponent.call(this);
              }
          })
          var port = new Ext.MyViewport();
     })
  </script>
</head>
<body>
<div id="mydiv"></div>
</body>
</html>

 

示例二:

 

Ext Designer 設計圖

說明:

1.隱藏的fieldLabel

在“我的表單”中的textfield、radio、checkbox、combobox其實都有fieldLabel這個配置項,默認為:標簽:  ,但很奇怪上面的視圖卻沒有任何文字--這便是筆者發現Ext Designer的第一個bug。

看到這里,親愛的朋友你可能會問--示例1也是這樣嗎?答:不是。因為經筆者測試發現,如果將父組件的布局設定為form布局即會顯示fieldLabel,如下:

2.buttonAlign:經筆者測試formPanel的此配置項在設計視圖中如果設定為right無法看到正確顯示(在項目中正常顯示),left、center顯示正常。如下:

 

重要點:

frame:formPanel的這個配置項決定了它的button是否在框架視圖內顯示。記得勾選此項,否則上圖中的2個“我的按鈕”將不在formPanel中顯示。

 

原始代碼:

Ext.MyForm=Ext.extend(Ext.form.FormPanel ,{
    xtype:"form",
    title:"我的表單",
    labelWidth:100,
    labelAlign:"left",
    layout:"column",
    width:400,
    height:350,
    padding:"10px",
    frame:true,
    style:";bodyPadding:10px;",
    bodyStyle:"",
    buttonAlign:"right",
    initComponent: function(){
        this.fbar=[
            {
                text:"我的按鈕"
            },
            {
                text:"我的按鈕"
            }
        ]
        this.items=[
            {
                xtype:"panel",
                title:"",
                border:false,
                columnWidth:1,
                layout:"column",
                items:[
                    {
                        xtype:"textfield",
                        fieldLabel:"標簽",
                        columnWidth:0.5
                    },
                    {
                        xtype:"textfield",
                        fieldLabel:"標簽",
                        columnWidth:0.5
                    }
                ]
            },
            {
                xtype:"panel",
                title:"",
                columnWidth:1,
                border:false,
                layout:"column",
                items:[
                    {
                        xtype:"textfield",
                        fieldLabel:"標簽",
                        columnWidth:0.5
                    },
                    {
                        xtype:"datefield",
                        fieldLabel:"標簽",
                        columnWidth:0.5
                    }
                ]
            },
            {
                xtype:"panel",
                title:"",
                border:false,
                layout:"column",
                columnWidth:1,
                items:[
                    {
                        xtype:"radio",
                        fieldLabel:"標簽",
                        boxLabel:"boxLabel",
                        validationEvent:"0.5",
                        columnWidth:""
                    },
                    {
                        xtype:"radio",
                        fieldLabel:"標簽",
                        boxLabel:"boxLabel"
                    }
                ]
            },
            {
                xtype:"panel",
                title:"",
                layout:"column",
                border:false,
                columnWidth:1,
                items:[
                    {
                        xtype:"checkbox",
                        fieldLabel:"標簽",
                        boxLabel:"boxLabel"
                    },
                    {
                        xtype:"checkbox",
                        fieldLabel:"標簽",
                        boxLabel:"boxLabel"
                    },
                    {
                        xtype:"checkbox",
                        fieldLabel:"標簽",
                        boxLabel:"boxLabel"
                    },
                    {
                        xtype:"checkbox",
                        fieldLabel:"標簽",
                        boxLabel:"boxLabel"
                    }
                ]
            },
            {
                xtype:"panel",
                title:"",
                layout:"column",
                columnWidth:1,
                items:[
                    {
                        xtype:"combo",
                        triggerAction:"all",
                        fieldLabel:"標簽",
                        columnWidth:0.5
                    },
                    {
                        xtype:"combo",
                        triggerAction:"all",
                        fieldLabel:"標簽",
                        columnWidth:0.5
                    }
                ]
            },
            {
                xtype:"htmleditor",
                anchor:"100%",
                fieldLabel:"標簽",
                height:150,
                width:300,
                columnWidth:1
            }
        ]
        Ext.MyForm.superclass.initComponent.call(this);
    }
})

 

現在用idea來顯示吧

如下所示:

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2016/2/21
  Time: 6:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
  <link rel="stylesheet" type="text/css" href="Extjs4.2/resources/css/ext-all-neptune-rtl.css">
  <script type="text/javascript" src="Extjs4.2/ext-all.js"></script>
  <script type="text/javascript" src="Extjs4.2/locale/ext-lang-zh_CN.js"></script>
  <script type="text/javascript">
    Ext.onReady(function(){
      var states = Ext.create('Ext.data.Store', {
        fields: ['abbr', 'name'],
        data : [
          {"abbr":"AL", "name":"Alabama"},
          {"abbr":"AK", "name":"Alaska"},
          {"abbr":"AZ", "name":"Arizona"}
        ]
      });
      Ext.MyForm=Ext.extend(Ext.form.FormPanel ,{
        xtype:"form",
        title:"我的表單",
        labelWidth:100,
        labelAlign:"left",
        layout:"column",
        width:550,
        height:450,
//        padding:"10px",
        bodyPadding :'5px',
        frame:true,
        buttonAlign:'center',
        defaults:{
          style:'margin-top:10px;',//子組件距離頂部間距
        },
        fieldDefaults:{
          labelAlign:'left',
          labelStyle:'margin-left:5px',//label距離左邊間距
          labelWidth:'30%'//注意:此選項設定后radio布局混亂--暫不知道radio應該怎樣布局
        },
        renderTo:'mydiv',
        initComponent: function(){
          this.fbar=[
            {
              text:"我的按鈕"
            },
            {
              text:"我的按鈕"
            }
          ]
          this.items=[
            {
              xtype:"panel",
              title:"",
              border:false,
              columnWidth:1,
              layout:"column",
              items:[
                {
                  xtype:"textfield",
                  fieldLabel:"標簽",
                  columnWidth:0.5
                },
                {
                  xtype:"textfield",
                  fieldLabel:"標簽",
                  columnWidth:0.5
                }
              ]
            },
            {
              xtype:"panel",
              title:"",
              columnWidth:1,
              border:false,
              layout:"column",
              items:[
                {
                  xtype:"textfield",
                  fieldLabel:"標簽",
                  columnWidth:0.5
                },
                {
                  xtype:"datefield",
                  fieldLabel:"標簽",
                  columnWidth:0.5
                }
              ]
            },
            {
              xtype:"panel",//暫不知如何正常布局(像上面的textfield那樣)
              title:"",
              border:false,
              layout:"column",
              columnWidth:1,
              items:[
                {
                  xtype:"radio",
                  fieldLabel:"性別",
                  boxLabel:"",
                  validationEvent:"0.5",
                  columnWidth:""
                },
                {
                  xtype:"radio",
//                  fieldLabel:"",
                  boxLabel:""
                }
              ]
            },
            /*{//若將下面的fieldset組件放在這里的items中則fledlset右邊框看不到了。原因暫時未知。
              xtype:"container",//panel
              title:"",
              layout:"form",//column
              border:false,
              columnWidth:1,
              items:[

              ]
            },*/
            {
              xtype:'fieldset',//暫不知如何正常布局,故采用fieldset
                  columnWidth:1,
              layout:'column',
              chechboxToggle:true,
              title:'愛好',
              defaultType:'checkbox',
              style:'margin-left:5px;margin-left:5px;',
              items:[
                {
                  xtype:"checkbox",
//                  fieldLabel:"愛好:",
                  boxLabel:"讀書",
                  columnWidth:0.1
                },
                {
                  xtype:"checkbox",
//                  fieldLabel:"",
                  boxLabel:"唱歌",
                  columnWidth:0.1
                },
                {
                  xtype:"checkbox",
//                  fieldLabel:"",
                  boxLabel:"跳舞",
                  columnWidth:0.1
                },
                {
                  xtype:"checkbox",
                  fieldLabel:"",
                  boxLabel:"繪畫",
                  columnWidth:0.1
                }
              ]
            },
            {
              xtype:"panel",
              title:"",
              layout:"column",
              columnWidth:1,
              border:false,
              items:[
                {
                  xtype:"combobox",
                  triggerAction:"all",
                  fieldLabel:"標簽",
                  columnWidth:0.5,
                  store: states,
                  displayField: 'name',
                  valueField: 'abbr'
                },
                {
                  xtype:"combobox",
                  triggerAction:"all",
                  fieldLabel:"標簽",
                  columnWidth:0.5,
                  store: states,
                  displayField: 'name',
                  valueField: 'abbr'
                }
              ]
            },
            {
              xtype:"htmleditor",
              anchor:"100%",
//              fieldLabel:"標簽",
              height:150,
              width:300,
              style:'margin-top:5px',
              columnWidth:1
            }
          ]
          Ext.MyForm.superclass.initComponent.call(this);
        }
      })
      var form = new Ext.MyForm();
    })
  </script>
</head>
<body>
<div id="mydiv"></div>
</body>
</html>

 

后記:Ext Designer 其他更多功能待續。。如果你看到這里,也對EXT感興趣就聯系我吧以前探討吧(qq: 472543236)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM