`

ext js 4 学习笔记6

ext 
阅读更多
一 ext.direct
    有点象DWR,但跨平台,根据后台暴露的功能生成前台的JS

  1)支持类库下载:directjngine  http://code.google.com/p/directjngine
  2)配置服务端功能
     比如首先formaction处理表单的读取和提交
     @DirectMethod
public ExtFormDirectResult loadProductServer(String productId){
ExtFormDirectResult result = new ExtFormDirectResult();
if("001".equals(productId)){
//获取产品信息
Product product = new Product();
product.setProductName("笔记本");
product.setIntroduction("本产品美观实用,售后服务优秀。");
//将产品信息放入结果对象中
result.setData(product);
result.setSuccess(true);
}else{
//设置错误信息
result.setErrorMessage("读取的产品id不存在");
result.setSuccess(false);
}
return result;
}
/**
* 表单提交处理方法
* @param params 表单参数集合
* @param files 文件集合
* @return 结果对象
*/
@DirectFormPostMethod
public ExtFormDirectResult submitProductServer(Map<String,String> params, Map<String, FileItem> files){
ExtFormDirectResult result = new ExtFormDirectResult();
//获取表单参数
String productName = params.get("productName");
if("笔记本".equals(productName)){
result.setSuccess(true);
}else{
result.addError("productName", "产品名称必须是:笔记本");
//设置错误信息
result.setErrorMessage("提交产品名称错误");
result.setSuccess(false);
}
return result;
}
  
   配置WEB.XML
     <!-- DirectJNgine servlet -->
<servlet>
<servlet-name>DjnServlet</servlet-name>
<servlet-class>
com.softwarementors.extjs.djn.servlet.DirectJNgineServlet</servlet-class>
<init-param>
<param-name>providersUrl</param-name>
<param-value>djn/directprovider</param-value>
</init-param>
<init-param>
<param-name>apis</param-name>
<param-value>form,data</param-value>
</init-param>
<init-param>
<param-name>form.apiFile</param-name>
<param-value>form/api.js</param-value>
</init-param>
<init-param>
<param-name>data.apiFile</param-name>
<param-value>data/api.js</param-value>
</init-param>
<init-param>
<param-name>form.apiNamespace</param-name>
<param-value>Ext.form.app</param-value>
</init-param>
<init-param>
<param-name>data.apiNamespace</param-name>
<param-value>Ext.data.app</param-value>
</init-param>
<init-param>
<param-name>form.classes</param-name>
<param-value>
com.sample.ext4.direct.form.action.FormAction
</param-value>
</init-param>
<init-param>
<param-name>data.classes</param-name>
<param-value>
com.sample.ext4.direct.data.action.DataAction
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!-- 指定gson的配置类 -->
<param-name>gsonBuilderConfiguratorClass</param-name>
<param-value>com.sample.ext4.direct.config.GsonBuilderConfiguratorCustom</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DjnServlet</servlet-name>
<url-pattern>/djn/directprovider/*</url-pattern>
</servlet-mapping>


   3 前端脚本引入
        <script type="text/javascript" src="../../form/api.js"></script>
      Ext.onReady(function(){
Ext.QuickTips.init();//初始化提示;
//注册api
Ext.Direct.addProvider(
Ext.form.app.REMOTING_API
);
var productForm = Ext.create('Ext.form.Panel',{
title:'在表单中使用Direct技术',
width : 300,
frame : true,
fieldDefaults:{//统一设置表单字段默认属性
labelSeparator :':',//分隔符
labelWidth : 80,//标签宽度
width : 270,//字段宽度
msgTarget : 'under'
},
api: {
        load: FormAction.loadProductServer,//加载数据的远程方法
        submit: FormAction.submitProductServer//提交数据的远程方法
    },
  paramOrder: ['productId'],
    renderTo: Ext.getBody(),
bodyPadding: 5,
defaultType: 'textfield',//设置表单字段的默认类型
items:[{
fieldLabel:'产品名称',
name : 'productName'
},{
fieldLabel:'产品简介',
name : 'introduction',
xtype : 'textarea'
}],
buttons:[{
text : '数据加载',
handler : loadData
},{
text : '数据提交',
handler : submitData
}]
});
//表单数据加载
function loadData(){
productForm.form.load({
params:{productId:'001'},//以产品id作为参数
success:function(form,action){//加载成功的处理函数
Ext.Msg.alert('提示','表单数据加载成功');
},
failure:function(form,action){//加载失败的处理函数
Ext.Msg.alert('提示','表单数据加载失败<br>失败原

因:'+action.result.errorMessage);
}
});
}
//表单数据提交
function submitData(){
productForm.form.submit({
success:function(form,action){//加载成功的处理函数
Ext.Msg.alert('提示','表单数据提交成功');
},
failure:function(form,action){//加载失败的处理函数
Ext.Msg.alert('提示','表单数据提交失败<br>失败原

因:'+action.result.errorMessage);
}
});
}
});

二  图形部分
    1) ext.draw为ext js 4中的新的图形包
    2)绘制基本图形
        Ext.onReady(function() {
//创建图形组件
    Ext.create('Ext.draw.Component', {
        width: 600,
        height: 400,
viewBox : false,//使图形保持原始大小
        renderTo: 'container',
        items: [{
            type: 'rect',//矩形
            x: 50,//矩形左上角的横坐标
            y: 20,//矩形左上角的纵坐标
            height: 150,//矩形的高度
            width: 150,//矩形的宽度
stroke : "#CCFFFF",//边线的填充颜色
fill : "#FF99CC"//填充的颜色
        },{
            type: 'circle',//圆形
            x: 280,//圆心的横坐标
            y: 95,//圆心的纵坐标
            radius: 70,//半径
stroke : "#FF0000",//边线的填充颜色
fill : "#FFCC66"//填充的颜色
        },{
            type: 'ellipse',//椭圆形
            x: 430,//圆心的横坐标
            y: 95,//圆心的纵坐标
            radiusX:50,//水平半径
radiusY:30,//垂直半径
stroke : "#000000",//边线的填充颜色
fill : "#CC00FF"//填充的颜色
        }]
    });
});

  3)线性渐变
    //创建图形组件
    Ext.create('Ext.draw.Component', {
        width: 600,
        height: 400,
viewBox : false,//使图形保持原始大小
        renderTo: 'container',
//定义线性渐变
gradients: [{
            id: 'grad1',//渐变id
            angle: 90,//角度
            stops: {//渐变层次
                0: {
                    color: '#FF0000'//红色
                },
                50: {
                    color: '#00FF00'//绿色
                },
                100: {
                    color: '#0000FF'//蓝色
                }
            }
        },{
            id: 'grad2',//渐变id
            angle: 135,//角度
            stops: {//渐变层次数组
                0: {
                    color: '#CC33FF'//黑色
                },
                100: {
                    color: '#FFFFFF'//白色
                }
            }
        },{
            id: 'grad3',//渐变id
            angle: 45,//角度
            stops: {//渐变层次数组
                50: {
                    color: '#000000'//黑色
                }
            }
        }],
        items: [{
            type: 'rect',//矩形
            x: 50,//矩形左上角的横坐标
            y: 20,//矩形左上角的纵坐标
            height: 150,//矩形的高度
            width: 150,//矩形的宽度
stroke : "#CCFFFF",//边线的填充颜色
fill: 'url(#grad1)'//使用渐变填充
        },{
            type: 'circle',//圆形
            x: 280,//圆心的横坐标
            y: 95,//圆心的纵坐标
            radius: 70,//半径
stroke : "#FF0000",//边线的填充颜色
fill: 'url(#grad2)'//使用渐变填充
        },{
            type: 'ellipse',//椭圆形
            x: 430,//圆心的横坐标
            y: 95,//圆心的纵坐标
            radiusX:50,//水平半径
radiusY:30,//垂直半径
stroke : "#000000",//边线的填充颜色
fill : "url(#grad3)"//使用渐变填充
        }]

三  CHART图表
    1)坐标轴
       Ext.onReady(function(){
var dataStore = new Ext.data.JsonStore({
fields:['name', 'percentage'],
data: [
{name :'小于30岁', percentage : 2},
{name :'30-40岁', percentage : 4},
{name :'40-50岁', percentage : 3},
{name :'50岁以上', percentage : 3}
]
});
Ext.create('Ext.panel.Panel', {
title : '员工年龄分布图',
width: 400,
height: 400,
renderTo: Ext.getBody(),
layout: 'fit',
items : [{
xtype : 'chart',
store : dataStore,
axes: [{
type: 'Numeric',//配置坐标轴类型为数值坐标
dashSize : 10,//坐标轴前导线条长度,默认为3
position: 'left',//配置坐标在左侧
fields: ['percentage'],//指定坐标对应的字段
title: '百分比',//配置坐标轴标题
grid: {
//奇数行
odd : {
opacity: 1,//不透明
fill: '#FFFF99',//表格内的填充色
stroke: '#FF3300',//表格线颜色
'stroke-width': 0.5//表格线宽度
},
//偶数行
even : {
opacity: 0,//透明
stroke: '#6600CC',//表格线颜色
'stroke-width': 0.5//表格线宽度
}
},
majorTickSteps : 10,//主区间数
minorTickSteps : 3//副区间数
}, {
type: 'Category',//配置坐标轴类型为目录坐标
position: 'bottom',//配置坐标在底部
fields: ['name'],//指定坐标对应的字段
grid : true,//启用表格
title: '年龄段'//配置坐标轴标题
}],
series : [{
    type: 'line',
axis: 'left',
xField: 'name',//横轴字段
yField: 'percentage'//纵轴字段
}]
}]
});
});

   2) 饼状图
      Ext.onReady(function(){
var dataStore = new Ext.data.JsonStore({
fields:['age', 'percentage', 'growing'],
data: [
{age :'小于30岁', percentage : 10, growing : 35},
{age :'30-40岁', percentage : 40, growing : 30},
{age :'40-50岁', percentage : 30,growing : 30},
{age :'50岁以上', percentage : 20, growing : 30}
]
});
Ext.create('Ext.panel.Panel', {
title : '员工年龄分布图',
width : 400,
height : 400,
renderTo: Ext.getBody(),
layout : 'fit',
items : [{
xtype : 'chart',
store : dataStore,
animate : true,//是否启用动画效果
legend : {
position : 'bottom' //图例位置
},
shadow : true,
series : [{
type : 'pie',//图表序列类型
field : 'percentage',//对应饼状图角度的字段名
showInLegend : true,//是否显示在图例当中
colorSet : ['#FFFF00','#669900','#FF6699','#66CCCC'],//颜色
label : {
field : 'age',//标签字段名
contrast : true,
color : '#FFFF00',
renderer : function(v){//自定义标签渲染函数
return "["+v+"]";
},
display : 'middle',//标签显现方式
font : '18px "Lucida Grande"'//字体
},
highlight : {
segment : {
margin: 10 //空白区域宽度
}
},
tips : {
trackMouse : true, //是否启用鼠标跟踪
width : 50,
height : 28,
renderer : function(storeItem) {//自定义渲染函数
var title =  storeItem.get('percentage') + '%';
this.setTitle(title);
}
}
}]
}]
});
});
   3 BAR条型图
      Ext.onReady(function(){
var dataStore = new Ext.data.JsonStore({
fields:['ageRange', 'proportion', 'growing'],
data: [
{ageRange :'小于30岁', proportion : 10, growing : 35},
{ageRange :'30-40岁', proportion : 40, growing : 30},
{ageRange :'40-50岁', proportion : 30,growing : 30},
{ageRange :'50岁以上', proportion : 20, growing : 30}
]
});
Ext.create('Ext.panel.Panel', {
title : '员工年龄分布图',
width: 400,
height: 400,
renderTo: Ext.getBody(),
layout: 'fit',
items : [{
xtype : 'chart',
store : dataStore,
axes: [{
type: 'Numeric',
position: 'bottom',
minimum : 0,//数轴最小值
maximum : 60,//数轴最大值
fields: ['proportion','growing'],//同时展示2个数据
title: '百分比'
}, {
type: 'Category',
position: 'left',
fields: ['ageRange'],
title: '年龄段'
}],
legend : {
position : 'bottom' //图例位置
},
series : [{
    type: 'bar',
gutter : 20,//配置条形图矩形之间的间距
groupGutter : 10,//配置条形图相邻两组矩形之间的距离是矩形宽度的10%
//column : true,//配置条形图的模式(true垂直false水平)
xPadding : 10,//配置左右坐标轴距图形的空隙
yPadding : 20,//配置上下坐标轴距图形的空隙
axis: 'bottom',
xField: 'ageRange',//左侧坐标轴字段
yField: ['proportion','growing'],//底部坐标轴字段
title : ['人员比例','增长速度'],//配置图例字段说明
label : {
field : ['proportion','growing'],//标签字段名
display : 'outside',//标签显现方式
font : '18px "Lucida Grande"',//字体
renderer : function(v){//自定义标签渲染函数
return v + '%';
}
}
}]
}]
});
});

4  柱状图
    Ext.onReady(function(){
var dataStore = new Ext.data.JsonStore({
fields:['ageRange', 'proportion', 'growing'],
data: [
{ageRange :'小于30岁', proportion : 10, growing : 35},
{ageRange :'30-40岁', proportion : 40, growing : 30},
{ageRange :'40-50岁', proportion : 30,growing : 30},
{ageRange :'50岁以上', proportion : 20, growing : 30}
]
});
Ext.create('Ext.panel.Panel', {
title : '员工年龄分布图',
width: 400,
height: 400,
renderTo: Ext.getBody(),
layout: 'fit',
items : [{
xtype : 'chart',
store : dataStore,
axes: [{
type: 'Numeric',
position: 'left',
minimum : 0,//数轴最小值
maximum : 60,//数轴最大值
fields: ['proportion','growing'],//同时展示2个数据
title: '百分比'
}, {
type: 'Category',
position: 'bottom',
fields: ['ageRange'],
title: '年龄段'
}],
legend : {
position : 'bottom' //图例位置
},
series : [{
    type: 'column',
axis: 'left',
xField: 'ageRange',//x轴字段
yField: ['proportion','growing'],//y轴字段
title : ['人员比例','增长速度'],//配置图例字段说明
label : {
field : ['proportion','growing'],//标签字段名
display : 'outside',//标签显现方式
font : '18px "Lucida Grande"',//字体
renderer : function(v){//自定义标签渲染函数
return v + '%';
}
}
}]
}]
});
});
    5 图表中使用主题
       items : [{
xtype : 'chart',
store : dataStore,
//theme: 'Base',//基本主题
//theme: 'Blue',//蓝色主题
theme: 'Category1',//彩色主题1 (有1-30个)

    6 自定义主题
          //创建自定义图表主题类Ext.chart.theme.Cust
Ext.define('Ext.chart.theme.Cust', {

//扩展基本主题
    extend : 'Ext.chart.theme.Base',

constructor: function(config) {
Ext.chart.theme.Base.prototype.constructor.call(this, Ext.apply({

//统一定义坐标轴样式
axis: {
                stroke: '#444',//指定坐标轴轴线颜色
                'stroke-width': 1//0表示无轴线,1表示有轴线
            },

//定义左侧坐标标签样式
axisLabelLeft: {
                fill: '#FF0000',//指定标签字体填充颜色
                font: '12px "Lucida Grande", sans-serif',
                padding: 3,//指定标签距离坐标轴的间距
                renderer: function(v) { return v; }//标签渲染函数
            },
//axisLabelTop:{}顶部左边标签样式
//axisLabelRight:{}顶部左边标签样式
//axisLabelBottom:{}顶部左边标签样式

//自定义底部坐标标题样式
axisTitleBottom: {
                font: 'bold 18px "Lucida Grande", sans-serif',//指定坐标轴标题字体
                fill: '#6600CC'//指定坐标轴标题文字填充色
            },
//axisTitleTop:{}顶部坐标标题样式
//axisTitleRight:{}右侧坐标标题样式
//axisTitleLeft:{}左侧坐标标题样式

//统一定义图表序列边线样式
series: {
                'stroke-width': 0//0表示无边线,1表示有边线
            },

//按顺序自定义图表序列颜色,colorSet属性会覆盖该主题
colors: [ "#FF0000", "#FFFF00"],

//按顺序定义图表序列填充染色,colors 优先级高于seriesThemes
seriesThemes: [{
                fill: "#66FF00",//fill 优先级高于stroke
stroke:"#FF3300"
            }, {
                fill: "#66FFFF",
stroke:"#FF33FF"
            }],

//统一自定义图表节点标志样式,markerCfg:属性会覆盖该主题
marker: {
                stroke: '#FFFF00',//指定标志边线颜色
                fill: '#660000',//指定标志填充色
                radius: 10//指定标志半径
            },
//按顺序自定义图表节点标志样式,markerCfg:属性会覆盖该主题
//markerThemes的优先级高于marker中的配置
markerThemes: [{
                fill: "#115fa6",//指定标志填充色
                type: 'circle' //指定标志类型
            }, {
                fill: "#94ae0a",
                type: 'cross'
            }, {
                type: 'plus'
            }]
}, config));
}
});
1
0
分享到:
评论

相关推荐

    Ext学习笔记

    Ext JS4学习教程+笔记(一) Ext JS4学习教程+笔记(二)事件处理 Ext JS4学习教程+笔记(六)DataView面板 Ext JS4学习教程+笔记(七)树面板Tree Panel Ext JS4学习教程+笔记(三)Ajax请求 Ext JS4学习教程+笔记...

    ext JS 源码和学习资料

    2. EXT_JS实用开发指南_个人整理笔记.docx:这是一份个人整理的学习笔记,可能包含了一些实战经验,对于学习EXT JS的实际应用和解决常见问题很有帮助。 3. ExtJS实用开发指南.pdf:同名但格式不同的文档,可能提供了...

    Gwt-ext学习笔记

    这篇学习笔记将深入探讨Gwt-ext的核心概念、功能以及如何在实际项目中应用。 GWT是由Google开发的一个开源框架,它允许开发者使用Java语言来编写前端Web应用。GWT编译器会将Java代码转换为优化过的JavaScript,以...

    ext学习资料 20篇详细学习笔记 初学者ext学习的文档

    EXT,全称EXT JS,是一种基于JavaScript的前端框架,由Sencha公司开发,主要用于构建富互联网应用程序(RIA)。EXT提供了一套完整的组件模型、数据绑定、事件系统和强大的布局管理,使得开发者能够创建功能丰富的、...

    Ext2.0的学习笔记

    ### Ext2.0学习笔记:深入理解Ajax与Ext框架 #### Ajax:实现异步无刷新数据交换的关键技术 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它利用了...

    ext api,ext 学习笔记,SWFUpload_多文件上传及部分工具

    EXT API的学习笔记涵盖了EXT库的使用方法、组件创建、事件处理、数据绑定等多个方面,帮助开发者深入理解EXT的机制。 在EXT环境中搭建,首先需要下载EXT库,包括JavaScript文件和必要的CSS样式表。然后,在HTML页面...

    Yui_ext 学习笔记

    【Yui_ext 学习笔记】 Yui_ext 是基于 Yahoo! UI Library (YUI) 的扩展,主要用于构建富客户端的 Web 应用程序。这篇学习笔记主要介绍了 Yui_ext 的基础知识,适合对 JavaScript 和 HTML DOM 有一定了解的初学者。 ...

    Gwt-ext学习笔记之基础篇

    ### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....

    EXT学习笔记-项目应用实践

    这篇EXT学习笔记主要涵盖了EXTJS中面向对象编程的一些关键概念和实践,包括命名空间、类定义、构造函数、属性与方法的访问控制(私有和公有)、静态属性与方法以及继承机制。 1. **命名空间**:在EXTJS中,命名空间...

    Extjs4.0学习笔记

    xtjs4,创建Ext组件有了新的方式,就是Ext.create(....),而且可以使用动态加载JS的方式来加快组件的渲染,我们再也不必一次加载已经达到1MB的ext-all.js了,本文介绍如何在EXTJS4中创建一个window。 共:10 小节, ...

    Gwt-Ext学习笔记之进级篇

    而Ext Js是一个JavaScript库,提供了丰富的用户界面组件,用于构建现代Web应用。 GWT-Ext是这两者的结合,它继承了GWT的Java编程模型和Ext Js的精美UI组件。这使得开发者可以利用Java的强大和类型安全,同时享受Ext...

    十分有用有帮助的EXT学习笔记

    EXT,全称EXT JS,是一种基于JavaScript的前端框架,用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,包括表格、窗体、面板、图表等,使得开发者可以创建功能强大的Web应用界面。以下是对EXT学习笔记中涉及...

    ext 4.0 学习笔记.doc

    EXT 4.0 是一款流行的JavaScript库,专门用于构建富客户端Web应用程序,特别是用于创建复杂的用户界面。在本文中,我们将关注EXT 4.0中的Array Grid,这是一种基础的表格展示组件,适合用来显示和操作二维数组数据。...

    extJs 2.1学习笔记

    目录 1. ExtJs 结构树 2 2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 ...28. extJs 2.0学习笔记(ext.js篇) 77

    Ext API详解--笔记

    这篇笔记将深入探讨Ext Js的核心API,涵盖多个关键模块。 1. **Ext.Element**: `Ext.Element`是Ext Js中的基础元素操作类,它封装了对DOM元素的各种操作,如尺寸调整、样式修改、事件处理等。在`EXT核心API详解...

Global site tag (gtag.js) - Google Analytics