zoukankan      html  css  js  c++  java
  • extjs4 笔记

    关于手册导航中图标的说明:

    蓝色-普通类

    紫红-单例类

    黑色-组件类

    --还有一种是包

    viewport一个应用只能有一个,否则EXT会抽风...

    ComponentQuery  的query中不要以viewport开始.

    Component 要可拖动,需要设置position:abrolute

    application 作为一个应用的开始文件

    requires 是Ext.classs上的属性

    定义一个类的时候使用singleton 将得到该类的实例,并与静态方式使用该实例 如 Ext.Message.Alert();

    应用中用到的模型,视图,需要在controller中注册才能使用,包括application中要使用都需要在controller中注册

    配置自定义后才能用set跟get方法获取,

    当别名为widget.开始的为全局试图别名,可以直接使用

    mixins方法是在CLASS上的,所以几乎所有的EXT对象都具有相互混合的能力(就是一个对象的方法给另一个对象使用) ,且混合时使用的key好象没啥作用的

    在运行application 之前创建一个对象,ext都会根据对象名去尝试加载它,所以在application中运行前定义定义类之后运行是不行的(指同个文件中)

    model是数据规格

    store是数据集

    model store 都可以接受数据代理proxy

    store有data,当有data的时候代理将被忽略,data将用于自动创建内存代理,store的代理或data得到的数据将用于model列表的创建
    除model外其他

    内存代理一般开启自动加载,而其他代理一般最后手动调用,

    field 是字段对象,附属于model与存在,但store也有该属性,但strore的该字段是用于自动创建model用的,所以field也是用于model的

               

     

    从上图可以看出model与store的关系.两者之间可以说通过代理类来链接

    而代理分为读写代理,store就是拿porxy来得到数据,并组装一堆model出来

    当model也有代理.是用于获取一个数据的, 或对一个数据进行操作的,因为model有save,load等方法

             

    Ext.grid.Panel

    分页的每页数量在store的pageSize控制

    对于数据的加载解析

    在proxy里配置,即Ext.data.reader.Reader

               

    totalProperty 总数的key

               

    successProperty 成功的字符串

    root 数据的key

               

     application 的配置

    在application中,launch是请求并初始化完控制器后运行的函数,这里通常是对试图渲染输出,但也可以通过设置

    autoCreateViewport为true来自动去请求view/Viewport.js来完成视图的输出,当你使用大于4.05版本的Extjs的时候,不在需要手动设置requires了

     controller的作用为请求必要的model,store,view等,并在control中对试图进行动作监听等.在controller初始化的时候也可以做些准备操作

     如果在control外还需要些事件监听,可以使用this.application.on()来增加

    如果你希望在controller在运行后处理东东,你可以使用onLaunch来处理,

    对于controller的控制为,先对版面进行区分划分,然后对每个区块建立一个controller

               

    对于panel中的dockedItems,需要明确指出工具条的类型,如果想简化,需要使用tbar,tbar...等

               

    元素查找:

    1.组件跟元素都有up,down分别对应向上跟向下查找元素,支持CSS规则

    2.对于全局查找,则可以用Ext.fly Ext.get Ext.getCmp

    及支持CSS规则查找的Ext.query (此方法加第二个参数跟1一样)及用于组件的Ext.ComponentQuery.query();

    3.视图创建,new 或 Ext.create 都可以创建,但如果alias被命名为widget.xxx后,可以使用Ext.widget('xx')获得,但是用widget的前提还必须是视图已经被引入,且可以直接使用在全局的xtype上在Ext4.05之后,在controller中添加依赖之后会自动加载,所以在controller中添加依赖后可以直接使用.默认系统组件的alias的名称为widget.xtype,所以系统组件都可以使用widget取出.当声明为别名为widget. 时要防止相互覆盖,且后面声明的会覆盖前声明的,例如声明一个组件的alias为widget.panel,将导致{xtype:"panel"}这样写法生成出来的都是你定义的那个组件,因为xtype使用的是全局组件.但Ext.create('Ext.panel.Panel') 不受影响

             

               

    动态操作组件

    先来段代码:

    var sl = Ext.widget('window', {

        width : 300,

        height : 200

    });

    var t = new Ext.Template([ '<div name="{id}">',

            '<span class="{cls}">{name:trim} {value:ellipsis(10)}</span>',

            '</div>', ]);

    t.compile();

    sl.show();

    t.append(sl.body, {

        id : 'myid',

        cls : 'myclass',

        name : 'foo',

        value : 'bar'

    });

    一个已经存在的window中增加一个渲染好的模板字符(不明白为什么文档里没有说有body属性)

    如果添加组件就更简单了,直接使用add把创建的组件添加进去即可

    删除:组件有个remove,元素也有个remove,其他参照文档,component的removieall是删除所有的组件.不包括元素

               

    错误:

               

    1.namespace is undefined

    出现这个错一般是有xtype(声明为全局组件的组件) 没找到报的错误

    2.使用application的时候如果声明的视图或其他的extjs类的文件错误,extjs不会报错,即加载完毕之后没啥反应.此时可以检查定义的类名与app定义的名字是否一直

    即: application的name 跟定义的类名是否一致 如 name:"UP" 定义类名需要为UP.view.pritem

    让panel可拖动,配置为:

    draggable:{

       onDrag : function(e){

            var pel = this.proxy.getEl();

            this.x = pel.getLeft(true);

            this.y = pel.getTop(true);

         },

          endDrag : function(e){

             this.panel.setPosition(this.x, this.y);

         }

    }     

    工具条:

    工具条包下的 Fill Item Separator Spacer TextItem 都为辅助工具条格式的组件

    工具条可以添加其他组件,比如button,pannel等,当然button最为常用

     button有menu属性,用于添加菜单,对于菜单,ColorPicker,DatePicker跟Menu为同一级

     Menu有CheckItem,Item(默认),Separator 菜单可用,而CheckItem可以这group来变为单选

    菜单使用Ext.menu.MenuMgr 统一管理 ,对于菜单显示,如果不是绑定到一个工具条上,可以使用组件类上的showAt()方法来显示,接受getXY返回值作为参数

           

    关于布局

    Ext.create('Ext.panel.Panel',{

    layout:'fit',//或{type:'vbox',align:'center'}

    title:'this is title'

    })

    layout 参数可以为:

    fit 单个视图

    border 边框,中间那个视图必须

    anchor 横向布局

    absolut 绝对定位布局 继承与anchor

    from 表单布局 (表单默认布局方式)

    column 竖向布局 Ext.grid.Panel 用到

    对于以上的横向跟竖向布局的不足,可以使用以下代替

    hbox 横向布局 vbox 竖向布局 使用最好指明对其方式 示例:{type:'vbox',align:'center'}

         

    关于表单验证

    对于表单验证,每个field有个vtype属性,默认系统支持的email alpha url alphanum

    自定义验证的方法如下

    Ext.form.field.VTypes.emailText="据说你的邮箱是错误的...";//重新定义错误信息

    var timeTest = /^([1-9]|1[0-9]):([0-5][0-9])(\s[a|p]m)$/i;

    Ext.apply(Ext.form.field.VTypes, {

    // vtype validation function

    time: function(val, field) {

    return timeTest.test(val);

    },

    // vtype Text property: The error text to display when the validation function returns false

    timeText: '顶个肺啊,错了~".',

    // vtype Mask property: The keystroke filter mask

    timeMask: /[\d\s:amp]/i

    });

    定义好了之后就可以使用了,上述定义中的vtype是time 需要在使用前定义好vtype,如果vtype没有定义直接使用会报错的..可以直接定义在使用的前面

    除了vtype验证,field本身就带了好几种验证且每个对应的消息体均可自定义(有点麻烦…)

    示例:

    {

        xtype : 'datefield',

        fieldLabel : '选择时间',

        name : 'aaa',

        allowBlank : false,//验证

        blankText:"此字段必填",//验证消息

    }

    其他的翻阅下手册.

       

    关于表单使用

    使用都很简单,formPanel里取得表单有getForm()方法

    有个表单组件涉及到store,官方示例如下

    var states = Ext.create('Ext.data.Store', {

    fields: ['abbr', 'name'],

    data : [

    {"abbr":"AL", "name":"Alabama"},

    {"abbr":"AK", "name":"Alaska"},

    {"abbr":"AZ", "name":"Arizona"}

    //...

    ]

    });

    // Create the combo box, attached to the states data store

    Ext.create('Ext.form.ComboBox', {

    fieldLabel: 'Choose State',

    store: states,

    queryMode: 'local',//类似于load 有local remote 用于获取远端的数据时候用到

    displayField: 'name',

    valueField: 'abbr',

    renderTo: Ext.getBody()

    });

     

    关于事件监听

    基本上所有的类都有实现Observable,所以很多类有有listeners 属性 具体的事件每个类各有不同

    listeners:{

        render:function(){

            alert("ddd");

        },

        dblclick: {

            element: 'body', //bind to the underlying body property on the panel

            fn: function(){ console.log('dblclick body'); }

        }

    },

    因为在create的时候panel的initComponent 方法是不能使用的,所以想在初始化的时候操作些东西监听事件是不错替代方案

    在controller中也有个control 方法,示例如下

    init: function() {

         this.control({

    'viewport .userlist': {

         itemdblclick: this.onPanelRendered

    },

    'viewport .slider':{

         changecomplete:this.mytest

    }

    });

    },

    store中如果存在data,且定义为ajax或其他, autoLoad 将失效

    使用application时,当store的storeId会被覆盖为该store名,所以定义无效.

    Ext.define('Index.store.User', {
        extend: 'Ext.data.Store',
        model:'Index.model.User',
        storeId:'simpsonsStore',//该定义无效,覆盖为User
       ***
    });
  • 相关阅读:
    权限管理命令
    常用命令2
    常用命令1
    queue
    poj 3984
    L3-008 喊山 (30 分)
    常州大学新生寒假训练会试 I 合成反应
    dfs 的全排列
    poj 1154
    hdu 1241
  • 原文地址:https://www.cnblogs.com/liushannet/p/2240505.html
Copyright © 2011-2022 走看看