SenchaTouch学习——form表单

  SenchaTouch是一个很不错的移动客户端框架,最近学习它的from部分,记录下code以备后查。

  一开始就被那优雅的界面迷住了,研究了一段ExtJs(Sencha),现在看客户端的代码有种似曾相识的感觉。一起开始吧!

1.第一步,当然还是引入基础的JS包,简单起见,我们引入了基本全部的资源。

2.第二步,当然是在页面引入js和css文件

<head>
<link rel="stylesheet" href="SenchaTouch2.3.1-gpl/resources/css/sencha-touch.css" type="text/css"/>
<script type="text/javascript" src="SenchaTouch2.3.1-gpl/sencha-touch-debug.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<style type="text/css">
    .bgColor{
        background-color:prink;
    }
</style>
</head>

3.第三步,写Js代码

Ext.require(['Ext.Panel','Ext.form.FieldSet','Ext.field.Text','Ext.form.Panel']);

Ext.application({
    name:'MyApp',
    icon:'images/icon.png', 
    // 用于指定应用程序被添加到使用ios操作系统的设备中的主屏幕时所使用的图片,可配ipad和iPhone不同图标
    glossOnIcon:false,
    // 是否取消ios操作系统中为主屏幕中的图标自动添加的gloss特效
    phoneStartupScreen:'images/phone_startup.png',
    // 用于指定应用程序被添加到ios主屏幕之后应用程序启动时所显示的图片
    // 必须320X640
    tabletStartupScreen:'images/tablet_startup.png',
    // 用于指定添加到ios系统主屏幕后应用程序启动时所显示的图片
    // 必须769X1004
    
    launch:function(){
        
        // 定义表单面板-------------------------------------------
        var formPanel = Ext.create('Ext.form.Panel',{
            id:'formPanel',
            scrollable:'vertical',    // (horizontal横向)是否允许滚动,纵向
            baseCls:'bgPink',        // 设置基本样式(以背景为例)
            cls:'smallFont',        // 设置基本样式(以字体为例) 
            items:[{
                xtype:'fieldset',
                title:'电影信息',            // 标题
                instructions:'请填写电影信息',// 描述
                defaults:{
                    label'10%',
                    xtype:'textfield'
                },
                items:[{
                    id:'txt_title',
                    name:'title',
                    label:'名称',            // 设置标签名
                    labelAlign:'left',        // 设置标签位置,默认left(top,right,bottom)
                    placeHolder:'请输入电影名称',// 未输入内容且失去焦点时显示值
                    required:true,            // 只能起到提示作用,不提供验证功能
                    clearIcon:true,            // 不为空时显示一个清除内容图标
                    listeners:{                // 增加监听器
                        change:function(item,newValue,oldValue){
                            console.log('修改之前为:'+oldValue);
                            console.log('修改之后为:'+newValue);
                        }
                    }
                },{
                    id:'txt_director',
                    name:'director',
                    label:'导演',
                    placeHolder:'请输入导演名称',
                    clearIcon:true
                },{
                    id:'txt_type',
                    name:'type',
                    label:'类型',
                    value:'爱情',    // 值属性
                    readOnly:true    // 只读属性
                },{
                    id:'txt_date',
                    name:'date',
                    label:'年代',
                    value:'2013年',    // 值属性
                    disabled:true,    // 禁用属性
                    disabledCls:'disabled' // 设置组件处于无效状态样式
                }]
            }]
        });
        
    
// ————组件测试————————————————————————————————————————————————————————————————————————————————        
        Ext.Viewport.add(formPanel);
        formPanel.getScrollable().getScroller().setFps(100);// 此句有问题
        formPanel.getScrollable().getScroller().scrollTo(0,200);
        formPanel.getScrollable().getScroller().scrollToEnd();//页面打开时表单面板自动滚动到表单底部
    }
});

4.查看运行出来的效果。如下图:

效果还很不错,很简约啊!~html5真强大。

上面的例子仅仅是一些简单的页面元素,下面再来几个看看。

这个示例里面多了不少form元素,下面瞅瞅代码吧~!

Ext.require(['Ext.MessageBox','Ext.Panel','Ext.form.FieldSet','Ext.field.*','Ext.form.Panel']);

Ext.application({
    name:'MyApp',
    icon:'images/icon.png', 
    // 用于指定应用程序被添加到使用ios操作系统的设备中的主屏幕时所使用的图片,可配ipad和iPhone不同图标
    glossOnIcon:false,
    // 是否取消ios操作系统中为主屏幕中的图标自动添加的gloss特效
    phoneStartupScreen:'images/phone_startup.png',
    // 用于指定应用程序被添加到ios主屏幕之后应用程序启动时所显示的图片
    // 必须320X640
    tabletStartupScreen:'images/tablet_startup.png',
    // 用于指定添加到ios系统主屏幕后应用程序启动时所显示的图片
    // 必须769X1004
    
    launch:function(){
        
        // 定义表单面板-------------------------------------------
        var formPanel = Ext.create('Ext.form.Panel',{
            id:'formPanel',
            scrollable:'vertical',    // (horizontal横向)是否允许滚动,纵向
            baseCls:'bgPink',        // 设置基本样式(以背景为例)
            cls:'smallFont',        // 设置基本样式(以字体为例) 
            items:[{
                xtype:'fieldset',
                title:'用户信息',            // 标题
                instructions:'请填写用户信息',// 描述
                defaults:{
                    label'10%'
                },
                items:[{
                    xtype:'textfield',
                    id:'txt_name',
                    name:'name',
                    label:'姓名',            // 设置标签名
                    labelAlign:'left',        // 设置标签位置,默认left(top,right,bottom)
                    placeHolder:'请输入姓名',// 未输入内容且失去焦点时显示值
                    required:true,            // 只能起到提示作用,不提供验证功能
                    clearIcon:true            // 不为空时显示一个清除内容图标
                },{
                    xtype:'passwordfield',
                    id:'txt_password',
                    name:'password',
                    label:'密码',
                    placeHolder:'请输入密码',
                    clearIcon:true
                },{
                    xtype:'spinnerfield',
                    id:'spn_age',
                    name:'age',
                    label:'年龄',
                    minValue:0,        // 最小值
                    maxValue:9,        // 最大值
                    stepValue:1,    // 步进值
//                    groupButtons:false, // 默认为true.为false+-各一边
                    cycle:true        // 达到最大从最小循环
                },{
                    xtype:'radiofield',
                    id:'txt_sex1',
                    name:'sex',
                    label:'男性',
                    value:'male',
                    checked:true,    // 默认选中
                    listeners:{
                        check:function(item,e){
                            console.log('您选择了:男性');
                        }
                    }
                },{
                    xtype:'radiofield',
                    id:'txt_sex2',
                    name:'sex',
                    label:'女性',
                    value:'female',
                    checked:false,    // 默认不选中
                    listeners:{
                        check:function(item,e){
                            console.log('您选择了:女性');
                        }
                    }
                },{
                    xtype:'checkboxfield',
                    id:'txt_hobby1',
                    name:'hobby',
                    label:'篮球',
                    value:'ball',
                    checked:true    // 默认选中状态
                },{
                    xtype:'checkboxfield',
                    id:'txt_hobby2',
                    name:'hobby',
                    label:'足球',
                    value:'ball',
                    checked:false    // 默认选中状态
                },{
                    xtype:'selectfield',
                    id:'txt_select',
                    name:'select',
                    label:'课程',
                    options:[{
                        text:'语文',
                        value:'1'
                    },{
                        text:'数学',
                        value:'2'
                    },{
                        text:'英语',
                        value:'3'
                    }],
                    listeners:{
                        change:function(select,newValue,oldValue){
                            console.log(newValue);
                            switch(newValue){
                            case '1':
                                Ext.Msg.alert('你选择了语文');
                                break;
                            case '2':
                                Ext.Msg.alert('你选择了数学');
                                break;
                            case '3':
                                Ext.Msg.alert('你选择了英语');
                                break;
                            }
                            
                        }
                    }
                },{
                    xtype:'emailfield',
                    id:'txt_email',
                    name:'email',
                    label:'Email',
                    placeHolder:'请输入有效的Email地址',
                    clearIcon:true
                },{
                    xtype:'urlfield',
                    id:'txt_url',
                    name:'url',
                    label:'个人网址',
                    placeHolder:'请输入有效的网址',
                    clearIcon:true
                },{
                    xtype:'textareafield',
                    id:'txt_textarea',
                    name:'memo',
                    label:'个人简介',
                    maxLength:1000,    // 最大字数
                    maxRows:4,        // 超过此行数会有滚动条
                    placeHolder:'请输入1000字以内的个人简介',
                    clearIcon:true
                },{
                    xtype:'searchfield',
                    id:'txt_search',
                    name:'search',
                    label:'检索',
                    placeHolder:'请输入检索关键字',
                    clearIcon:true
                }]
            }]
        });
        
    
// ————组件测试————————————————————————————————————————————————————————————————————————————————        
        Ext.Viewport.add(formPanel);
//        formPanel.getScrollable().getScroller().setFps(100);// 此句有问题
        formPanel.getScrollable().getScroller().scrollTo(0,200);
        formPanel.getScrollable().getScroller().scrollToEnd();//页面打开时表单面板自动滚动到表单底部
        
        //设置值,有问题 
//        formPanel.getComponent('txt_sex1').setGroupValue('female');
    }
});

如果一些selectfield的值较多,可以来自本地Store也可以来自Proxy。

部分代码如下:

launch:function(){

        // 定义genre
        Ext.define('genre', {
            extend : 'Ext.data.Model',
            config : {
                fields : [ {
                    name : 'id',
                    type : 'int'
                }, {
                    name : 'genre',
                    type : 'string'
                } ]
            }
        });
        
            
        // 本地数据
        var genreStore = Ext.create('Ext.data.Store',{
            model:'genre',
            data:[                        // 数据集,记录
                  {id:1,genre:'喜剧'},
                  {id:2,genre:'韩剧'},
                  {id:3,genre:'美剧'}
                 ]
        });
        
        // 定义表单面板-------------------------------------------
        var formPanel = Ext.create('Ext.form.Panel',{
            id:'formPanel',
            scrollable:'vertical',    // (horizontal横向)是否允许滚动,纵向
            baseCls:'bgPink',        // 设置基本样式(以背景为例)
            cls:'smallFont',        // 设置基本样式(以字体为例) 
            items:[{
                xtype:'fieldset',
                title:'电影信息',            // 标题
                instructions:'请填写电影信息',// 描述
                defaults:{
                    label'10%'
                },
                items:[{
                    id:'txt_title',
                    name:'title',
                    label:'名称',            // 设置标签名
                    labelAlign:'left',        // 设置标签位置,默认left(top,right,bottom)
                    placeHolder:'请输入电影名称',// 未输入内容且失去焦点时显示值
                    required:true,            // 只能起到提示作用,不提供验证功能
                    clearIcon:true,            // 不为空时显示一个清除内容图标
                    listeners:{                // 增加监听器
                        change:function(item,newValue,oldValue){
                            console.log('修改之前为:'+oldValue);
                            console.log('修改之后为:'+newValue);
                        }
                    }
                },{
                    xtype:'textfield',
                    id:'txt_director',
                    name:'director',
                    label:'导演',
                    placeHolder:'请输入导演名称',
                    clearIcon:true
                },{
                    id:'txt_genre',
                    xtype:'selectfield',    // 选取框
                    name:'genre',
                    label:'类型',
                    valueField:'id',        // 实际信息
                    displayField:'genre',    // 展示信息
                    store:genreStore        // 存储store
                },{
                    xtype:'textfield',
                    id:'txt_date',
                    name:'date',
                    label:'年代',
                    value:'2013年',    // 值属性
                    disabled:true,    // 禁用属性
                    disabledCls:'disabled' // 设置组件处于无效状态样式
                }]
            }]
        });

能实现相同的效果,有更加灵活的代码风格。

原文地址:https://www.cnblogs.com/tzhz/p/3497774.html