zoukankan      html  css  js  c++  java
  • [Ext JS 4] contentEL,renderTo, applyTo 释义与区别

    前言

    若干年前,使用Ext JS 3 开发了一个系统。

    随着Ext JS 4的出现,总是会看到或听到关于Ext 比较多的言论是 :

    Ext JS 4 较Ext JS 3 有较大的改变。

    Ext JS 4不向下兼容。

    Ext JS 4 开始收费了。

    基于这些,对Ext JS 4一直就望而却步。也曾转向使用dojo.

    但是对Ext JS 4 的新的平板风格和一些性能上的考量之后,还是决定使用Ext js 4.

    在升级结束之际,总结一些主要的改变和应对之策。


    创建组件方法 new Ext.XXX ==> Ext.create("",{})

    在Ext JS 4之前,创建一个组件的方法是:

    var win = new Ext.Window({  
                //some options  
        });  

    在Ext JS 4中, 创建一个组件的方法改变了。 使用Ext.create 的方式。

     var win = Ext.create("Ext.window.Window",{  
                //some options  
        });  

    这中改变,其实是Ext JS 4 改进的一个亮点, 就是支持动态加载了。

    在使用旧的方式的时候,相应组件定义的js 文件必须被先include 进来(旧的版本全部包在ext-all.js中), 在新版中可以只导入一些核心的类,其他需要的类使用require 的方式动态导入, 好处就是提高了性能。

    当然,在新版中也是支持旧的创建方式的。所以对于升级这件事来说,如果不考虑或者这种类型不考虑动态加载的话, 可以不做更改。


    数据模型改变(Ext.data.Record ==> Ext.data.Model)

    这个已经完全替换了, 就的方式已经不能work了,必须更改

    直接看两个例子就清楚了:

    Ext JS 3 的方式:

    <!-- add by oscar999 -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="../adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="../ext-all.js"></script>
    <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"/>
    
    <script>
    Ext.onReady(function(){
        var persons = [{
            name: 'Liu Bei',
            rank: 'Marshal'
        }, {
            name: 'Zhang Fei',
            rank: 'Admiral'
        }, {
            name: 'Guan Yu',
            rank: 'Admiral'
        }, {
            name: 'Zhao zilong',
            rank: 'Admiral'
        }];
        
        var personRecord = Ext.data.Record.create([{
            name: 'name'
        }, {
            name: 'rank'
        }]);
        var personStore = new Ext.data.Store({
            data: persons,
            reader: new Ext.data.JsonReader({
                id: 'personXX'
            }, personRecord)
        });
        
        var personGrid = new Ext.grid.GridPanel({
            title: 'Three Kingdom',
            region: 'center',
            margins: '0 5 5 0',
            height: 400,
            columns: [{
                dataIndex: 'name',
                header: 'Name',
                 200
            }, {
                dataIndex: 'rank',
                header: 'Rank',
                 300
            }],
            store: personStore,
            renderTo: Ext.getBody()
        });
    });
    </script>
    
    </head>
    <body>
    
    </body>
    </html>


    Ext JS 4的写法

    <!-- add by oscar999 -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="../ext-all.js"></script>
    <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"/>
    
    <script>
    Ext.onReady(function(){
    	var persons = [{
            name: 'Liu Bei',
            rank: 'Marshal'
        }, {
            name: 'Zhang Fei',
            rank: 'Admiral'
        }, {
            name: 'Guan Yu',
            rank: 'Admiral'
        }, {
            name: 'Zhao zilong',
            rank: 'Admiral'
        }];
        
        var personModel = Ext.define('Person',
        	{
        	 extend: 'Ext.data.Model',
        	 fields: [{name: 'name',  type: 'string'},{name: 'rank',  type: 'string'}]
        });
        var personStore = Ext.create('Ext.data.Store',{
        	model: 'Person',
            data: persons
        });
        
        var personGrid = new Ext.grid.GridPanel({
            title: 'Three Kingdom',
            region: 'center',
            margins: '0 5 5 0',
            height: 400,
            columns: [{
                dataIndex: 'name',
                header: 'Name',
                 200
            }, {
                dataIndex: 'rank',
                header: 'Rank',
                 300
            }],
            store: personStore,
            renderTo: Ext.getBody()
        });
    });
    </script>
    
    </head>
    <body>
    
    </body>
    </html>


    注意,为了更清楚的比较,这里只仅仅是让模型和store 的写法不一致(Grid 的定义也要使用Ext.create的方式)。

    这里还可以看到一个区别就是Ext JS 4不需要额外导入 ext-base.js


    新类型定义(Ext.reg ==> Ext.define)

    从Ext.reg 转到Ext.define来创建组件类, 一个好处也是可以实现动态加载JS 类。

    而且新的方式会自动完成命名空间的创建(namespace).

    旧的方式:

        Ext.ns("Foo.bar");  
          
        Foo.bar = Ext.extend(Ext.util.Observable,{  
                //your code here  
        });  
        Ext.reg("foobar",Foo.bar);  


    新的方式:

        Ext.define("Foo.bar",{  
                extend : "xxxxxx",  
                alias : "widget.foobar"  
                //your code here  
        });  

    不难理解,为什么可以实现动态记载。一个创建需要的是一个js 对象,而另外一个只是一个string.

    Store定义的变化(跨域参数传递)

    旧的方式:

        var store = new Ext.data.Store({
            proxy: new Ext.data.ScriptTagProxy({
                url: 'http://extjs.com/forum/topics-remote.php'
            }),
            ......
            baseParams: {limit:20, forumId: 4}
        });
    


    新的方式:

    var store = Ext.create('Ext.data.Store', {
        model: 'User',
        proxy: {
            type: 'jsonp',
            url : 'http://extjs.com/forum/topics-remote.php',
            extraParams: {limit:20, forumId: 4}
        }
    });


    上面介绍的 ”数据模型改变(Ext.data.Record ==> Ext.data.Model) “也是store reader 的定义的变化。

    除此之外,上面的例子还有三个不一样的地方:

    1. new Ext.XXX ==> Ext.create, 这个上面也介绍到了

    2. 跨域取数据的store 定义 (不兼容,需要更新)

    旧的方式使用new Ext.data.ScriptTagProxy,新的方式只需要指定proxy的type 为 jsonp 就可以了

    3. 参数传递(不兼容,需要更新)

    旧的方式是在store 下配置baseParams, 新的方式需要到proxy 下配置extraParams.


    applyTo/renderTo 的改变


    参考:

    [Ext JS 4] contentEL,renderTo, applyTo 释义与区别



  • 相关阅读:
    VOA 2009/11/02 DEVELOPMENT REPORT In Kenya, a Better Life Through Mobile Money
    2009.11.26教育报道在美留学生数量创历史新高
    Java中如何实现Tree的数据结构算法
    The Python Tutorial
    VOA HEALTH REPORT Debate Over New Guidelines for Breast Cancer Screening
    VOA ECONOMICS REPORT Nearly Half of US Jobs Now Held by Women
    VOA ECONOMICS REPORT Junior Achievement Marks 90 Years of Business Education
    VOA 2009/11/07 IN THE NEWS A Second Term for Karzai; US Jobless Rate at 10.2%
    Ant入门
    Python 与系统管理
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3215115.html
Copyright © 2011-2022 走看看