`
my_java_life
  • 浏览: 146998 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Ext4.0学习笔记(4~9章 MVC、高级组件、布局以及图表)

 
阅读更多

               第四章 MVC学习

 



 从这个图中我们可以很清楚的看到M 、V、C在ExtJS4.0里面所对应数据类型。

 靠右边是对应的代码结构。


 下描述一下这model、store、view、controller以及application这几者之间的关系。


(1)application:它是MVC的入口,用来告诉ExtJS到那里去找对应js文件以及启动加载controller与view连个模块的代码。

 

//打开动态加载js功能
	Ext.Loader.setConfig({
		enabled:true
	});
	Ext.application({
		name : 'AM',//应用的名字 (根) 利用MVC时这时定义的包路径需要与命名空间的层次关系一致
		appFolder : "app",//应用的目录
		launch:function(){//当前页面加载完成执行的函数
	        Ext.create('Ext.container.Viewport', { //简单创建一个试图(填充整个浏览器)
	        	layout:'auto',//自动填充布局
	            items: {
	            	xtype: 'userlist', //引用已经定义的别名进行初始化类
	                title: 'Users',
	                html : 'List of users will go here'
	            }
	        });
		},
		controllers:[
			'Users'
		]
	});

 (2)controller:这一层主要是用来处理业务逻辑,即View上一些动作所触发要执行的操作都在此实现。同时它也是关联view、store以及model的地方。

 

Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',
	init:function(){
		this.control({
			'userlist button[id=delete]':{
				click:function(o){
					var gird = o.ownerCt.ownerCt;
						var data = gird.getSelectionModel().getSelection();
						if(data.length == 0){
							Ext.Msg.alert("提示","您最少要选择一条数据");
						}else{
							//1.先得到ID的数据(name)
							var st = gird.getStore();
							var ids = [];
							Ext.Array.each(data,function(record){
								ids.push(record.get('name'));
							})
							//2.后台操作(delet)
							Ext.Ajax.request({
								url:'/extjs/extjs!deleteData.action',
								params:{ids:ids.join(",")},
								method:'POST',
								timeout:2000,
								success:function(response,opts){
									Ext.Array.each(data,function(record){
										st.remove(record);
									})
								}
							})
							//3.前端操作DOM进行删除(ExtJs)
						}
				}
			}
		});
	},
	views:[
		'List' //必须是文件名称
	],
	stores :[
		"Users" //
	],
	models :[
		"User" //这个就是store里面引用的model,所在js文件的名字,保持和定义model的类名一样。eg:AM.model.User
		       //(这个主要是给store层用的,当store在当前缓存中找不到指定命名空间定义的model时,再去加载User.js文件,
		       //再根据文件内容初始化定义model。如果缓存中已经有了model的定义,其实这个是可以不要的。)
			   //同样views、store都可以通过各种各样的工厂生成,来去掉。
	] 
});

 (3)model、store:它们俩主要做为模型数据层。主要是给view层提供数据展示的。

 

//User数据集合
Ext.define('AM.store.Users', {
	extend: 'Ext.data.Store',
	model: 'AM.model.User',
	storeId: 's_user',
	proxy:{
	    type:'ajax',
	    url:'/extjs/extjs!getUserList.action',
	    reader: {
	        type: 'json',
	        root: 'topics'
	    },writer:{
			type:'json'
		}
	},
	autoLoad: true //很关键
});

 (4)view:这一层主要负责页面展示,也是确确实实能看见的一层。


Ext.define("AM.view.List",{
	extend:'Ext.grid.Panel',
	title : 'Grid Demo',//标题
	alias: 'widget.userlist',//别名定义
	frame : true,//面板渲染
	width : 600,
	height: 280,
	columns : [ //列模式
				{text:"Name",dataIndex:'name',width:100},
				{text:"age",dataIndex:'age',width:100},
				{text:"email",dataIndex:'email',width:350,
					field:{
						xtype:'textfield',
						allowBlank:false
					}
				}
	],
	tbar :[
				{xtype:'button',text:'添加',iconCls:'table_add'},
				{xtype:'button',id:'delete',text:'删除',iconCls:'table_remove'},
				{xtype:'button',text:'修改',iconCls:'table_edit'},
				{xtype:'button',text:'查看',iconCls:'table_comm'}
	],	
	dockedItems :[{
				xtype:'pagingtoolbar',
				store:'Users',
				dock:'bottom',
				displayInfo:true
	}],
	plugins:[
				Ext.create("Ext.grid.plugin.CellEditing",{
					clicksToEdit : 2
				})
	],
	selType:'checkboxmodel',//设定选择模式
	multiSelect:true,//运行多选
	store : 'Users',
	initComponent:function(){
		this.callParent(arguments);
	}
});












  第五章 Grid组件

1. 表格面板类Ext.grid.Panel基本属性。(两个别名xtype:gridpanel, grid)


    重要的配置参数:
       (1)columns : Array 列模式(Ext.grid.column.Columnxtype: gridcolumn)
        列里面的常用配置参数:
                text : String 列的标题 默认是""
                dataIndex : String 和Model的列一一对应的
                field: {} //配合插件使用,告诉插件在那一列起作用
                xtype:默认为gridcolumn
                renderer : function(value) //可以列里面值显示之前,做一些改变。

                                                   //参数value就是列的值,我可以在函数处理后,返回其改变后的值。
       (2)title : String 表格的标题,如果不写默认表格是没有头标题那一栏。
       (3)renderTo : Mixed 把表格渲染到什么地方,即展示到那个元素里面。
       (4)width : Number 宽
       (5)height: Number 高           
       (6)frame : Boolean 是否填充渲染这个Panel(渲染的比较好看)
       (7)forceFit : true 设定表格列的长度是否自动填充
       (8)store : store 数据集合
       (9)tbar: [] 头部工具栏,里面可以放置各种按钮
       (10)bbar:[] 底部操作栏,一般放分页面板
       (11)dockedItems : Object/Array 更具有位置的灵活性,当你用这个属性时,

                                                     可以指定工具条停靠在表格中上下左右位置;可以用来替换tbar与bbar。 
       
       (12)selType : 'checkboxmodel'/'rowmodel'/'cellmodel',

                             选择模式即选中记录方式:选择框/鼠标单击或双击行选择/鼠标单击或双击单元格选择

                            (用多选框模式时,forceFit属性最好不启用,或则样式不好看)
       (13)multiSelect :true,//允许多选 与上面属性联合属性
       (14)plugins :[] 插件的形式,为表格添加一些特殊的功能(eg:单元格编辑、行编辑以及行拖拽等)

 

         例子可以参考上面MVC里面view层里面的grid定义。

 

2. 常用表格的列都有哪些类型。


    (1)Ext.grid.column.Column xtype: gridcolumn 普通列
   
    (2)Ext.grid.column.Action xtype: actioncolumn
        在表格中渲染一组图标按钮,并且为他赋予某种功能,类似于链接
          altText : String 设置应用image元素上的alt
          handler : function(view,rowindex,collndex,item,e);
          icon     : 图标资源地址
          iconCls : 图标样式
          items   : 多个图标的数组   //在使用MVC的时候建议不要用  如果大家有好得放大请与uspcat联系
                function(o,item,rowIndex,colIndex ,e)
          stopSelection : 设置是否单击选中不选中
           
   (3)Ext.grid.column.Boolean xtype: booleancolumn
          falseText,

          trueText
       
   (4)Ext.grid.column.Date xtype: datecolumn
          format:'Y年m月的日'
       
   (5)Ext.grid.column.Number xtype: numbercolumn
          format:'0,000'
       
   (6)Ext.grid.column.Template xtype: templatecolumn
          xtype:'templatecolumn',
          tpl :"${字段的名称}"  可以进行动态的组合字段的值,作为该字段的值。

   (7)Ext.grid.RowNumbererxtype: rownumberer    //显示行号

 

Ext.define("AM.view.List",{
	extend:'Ext.grid.Panel',
	title : 'Grid Demo',//标题
	alias: 'widget.userlist',
	frame : true,//面板渲染
	width : 1000,
	height: 280,
	columns : [ //列模式
				Ext.create("Ext.grid.RowNumberer",{}),
				{text:"Name",dataIndex:'name',width:100},
				{text:"age",dataIndex:'age',width:100},
				{text:"email",dataIndex:'email',width:200,
					field:{
						xtype:'textfield',
						allowBlank:false
					}
				},{
					text:'sex',
					dataIndex:'sex',
					width:50,
					DDName:'sy_sex',
					renderer:function(value){
						if(value){
							if(value == "女"){
								return "<font color='green'>"+value+"</font>"
							}else if(value == "男"){
								return "<font color='red'>"+value+"</font>"
							}
						}
					}
				},{
					text:'isIt',
					dataIndex:'isIt',
					xtype : "booleancolumn",
					width:50,
					trueText:'是',
					falseText:'不是'
				},{
					text:'birthday',
					dataIndex:'birthday',
					xtype : "datecolumn",
					width:150,
					format:'Y年m月d日'
				},{
					text:'deposit',
					dataIndex:'deposit',
					xtype:'numbercolumn',
					width:150,
					format:'0,000'
				},{
					text:'描述',xtype:'templatecolumn',
					tpl:'姓名是{name} 年龄是{age}',
					width:150
				},{
				 text:'Action',xtype:'actioncolumn',
				 id:'delete',
				 icon:'app/view/image/table_delete.png',
				 width:50//,
//				 items :[
//				 	{},{}
//				 ]
//				 handler:function(grid,row,col){
//				 	alert(row+" "+col);
//				 }
				}
	],
	tbar :[
				{xtype:'button',text:'添加',iconCls:'table_add'},
				{xtype:'button',id:'delete',text:'删除',iconCls:'table_remove'},
				{xtype:'button',text:'修改',iconCls:'table_edit'},
				{xtype:'button',text:'查看',iconCls:'table_comm'}
	],	
	dockedItems :[{
				xtype:'pagingtoolbar',
				store:'Users',
				dock:'bottom',
				displayInfo:true
	}],
	plugins:[
				Ext.create("Ext.grid.plugin.CellEditing",{
					clicksToEdit : 2 //单击几下
				})
	],
	selType:'checkboxmodel',//设定选择模式
	multiSelect:true,//运行多选
	store : 'Users',
	initComponent:function(){
		this.callParent(arguments);
	}
});

 

3. 选择模型Ext.selection.Model的用法(嵌套在一些高级组件使用)以及表格的一些特性功能。


     选择模型Ext.selection.Model的用法

    (1)选择模式的根类Ext.selection.Model (通过选择模式里面提供的方法进行操作行的选择)
           重要方法:
                撤销选择 deselect( Ext.data.Model/Index records, Boolean suppressEvent ) : void
                得到选择的数据getSelection( ) : Array
                得到最后被选择数据getLastSelected( ) : void
                判断你指定的数据是否被选择上isSelected( Record/Number record ) : Boolean
                选择你指定的行selectRange( Ext.data.Model/Number startRow, Ext.data.Model/Number endRow, [Boolean keepExisting], Object dir ) : void
                keepExisting true保留已选则的项,false重新选择,不保留已选则的项
           
   (2) 隐藏了一个单元格的选择模式 selType: 'cellmodel'    (从这发现的Ext.grid.plugin.CellEditing)
           重要方法
                得到被选择的单元格getCurrentPosition() Object
                    Ext.JSON.encode()
                    itemclick( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e, Object options )


                selectByPosition({"row":5,"column":6}) 很实用,选中你要特殊处理的数据单元格
           
   (3) Ext.selection.CheckboxModel 多选框选择器
        重要方法
   
   (4)Ext.selection.RowModel      rowmodel 行选择器(通过鼠标单击表的行记录进行选择)
         重要属性
              multiSelect 允许多选
              simpleSelect 单选选择功能
              enableKeyNav 允许使用键盘上下键选择


    表格的一些特性功能 

   (1)Ext.grid.feature.RowBody  表格的行体(在行的下面来一个空白行,显示你所需要的信息)
          重要方法
                getAdditionalData( Object data, Number idx, Ext.data.Model record, Object orig ) : void
                如果你要展示这个面板那么必须复写这个方法
                features: [
                        Ext.create("Ext.grid.feature.RowBody",{
                            getAdditionalData:function(data,idx,record,orig){
                                ......
                            }
                        })
                ],   
                2.必须返回行体的对象
                var headerCt = this.view.headerCt,
                    colspan  = headerCt.getColumnCount();
                return {
                    rowBody: "",
                    rowBodyCls: this.rowBodyCls,
                    rowBodyColspan: colspan
                };
               
   (2)Ext.grid.feature.AbstractSummary negative 能够在表格数据的最后做一些统计功能。

                                                                   (eg:统计某一列的平局值等)
          Ext.grid.feature.Summary
               实用方法是在
                    第一步
                    features: [{
                        ftype: 'summary'
                    }],
                    第二步
                    columns中配置summaryType: 'count', (count,sum,min,max,average)
                    summaryRenderer: function(value, summaryData, dataIndex) {
                       return Ext.String.format(' : '+value);
                    }   
    用于对某一列,进行求平均值等。           
                           
   (3)Ext.grid.feature.Grouping       
          在store中设置可以分组的属性
            groupField : ' '
          在view中增加代码
            Ext.create("Ext.grid.feature.Grouping",{
                    groupByText : "职业分组",
                    groupHeaderTpl : "职业{name}  一共{rows.length}人",
                    showGroupsText : "展示分组",
                    startCollapsed : true
               
            }   

       
  (4)其它功能:

            重要事件
                  groupclick
                  groupdblclick
                  groupcontextmenu
                  groupexpand
                  groupcollapse


  (5)Ext.grid.feature.GroupingSummary


  (6)Ext.grid.feature.Chunking

 

Ext.define("AM.view.List",{
	extend:'Ext.grid.Panel',
	title : 'Grid Demo',//标题
	alias: 'widget.userlist',
	frame : true,//面板渲染
	width : 1100,
	height: 450,
	features: [
		Ext.create("Ext.grid.feature.RowBody",{
		    getAdditionalData: function(data, idx, record, orig) {
		        var headerCt = this.view.headerCt,
		            colspan  = headerCt.getColumnCount();
		        return {
		            rowBody: record.get('email'),
		            rowBodyCls: this.rowBodyCls,
		            rowBodyColspan: colspan
		        };
		    }
		}),{
			ftype: 'summary'
		},Ext.create("Ext.grid.feature.Grouping",{
					groupByText : "性别分组",
					groupHeaderTpl : "性别{name}  一共{rows.length}人",
					showGroupsText : "展示分组"
				
		})
	],	
	columns : [ //列模式
				Ext.create("Ext.grid.RowNumberer",{}),
				{text:"Name",dataIndex:'name',width:100},
				{text:"age",dataIndex:'age',width:100,
					summaryType:'average',
					summaryRenderer: function(value, summaryData, dataIndex) {
			           return Ext.util.Format.number(value,"00.0")
			        }	
				},
				{text:"email",dataIndex:'email',width:200,
					field:{
						xtype:'textfield',
						allowBlank:false
					}
				},{
					text:'sex',
					dataIndex:'sex',
					width:50,
					DDName:'sy_sex',
					renderer:function(value){
						if(value){
							if(value == "女"){
								return "<font color='green'>"+value+"</font>"
							}else if(value == "男"){
								return "<font color='red'>"+value+"</font>"
							}
						}
					}
				},{
					text:'isIt',
					dataIndex:'isIt',
					xtype : "booleancolumn",
					width:50,
					trueText:'是',
					falseText:'不是'
				},{
					text:'birthday',
					dataIndex:'birthday',
					xtype : "datecolumn",
					width:150,
					format:'Y年m月d日'
				},{
					text:'deposit',
					dataIndex:'deposit',
					xtype:'numbercolumn',
					width:150,
					format:'0,000'
				},{
					text:'描述',xtype:'templatecolumn',
					tpl:'姓名是{name} 年龄是{age}',
					width:150
				},{
				 text:'Action',xtype:'actioncolumn',
				 id:'delete',
				 icon:'app/view/image/table_delete.png',
				 width:50//,
//				 items :[
//				 	{},{}
//				 ]
//				 handler:function(grid,row,col){
//				 	alert(row+" "+col);
//				 }
				}
	],
	tbar :[
				{xtype:'button',text:'添加',iconCls:'table_add'},
				{xtype:'button',id:'del',text:'删除',iconCls:'table_remove'},
				{xtype:'button',text:'修改',iconCls:'table_edit'},
				{xtype:'button',text:'查看',iconCls:'table_comm'},
				{xtype:'button',id:'selection',text:'selection',iconCls:'table_comm'}
	],	
	dockedItems :[{
				xtype:'pagingtoolbar',
				store:'Users',
				dock:'bottom',
				displayInfo:true
	}],
	plugins:[
				Ext.create("Ext.grid.plugin.CellEditing",{
					clicksToEdit : 2
				})
	],
	//selType:'rowmodel',//设定选择模式
	selType:'cellmodel',
	//multiSelect:true,//运行多选
	//enableKeyNav :true,
	store : 'Users',
	initComponent:function(){
		this.callParent(arguments);
	}
});

 

 

Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',
	init:function(){
		this.control({
			'userlist':{
				itemclick:function(View,  record,  item,  index,  e,  options ){
					var sm = View.getSelectionModel();//.getSelection();		   			
		   			//alert(Ext.JSON.encode(sm.getCurrentPosition()));
					sm.selectByPosition({"row":1,"column":2});
				}
			},
			'userlist button[id=selection]':{
				click:function(o){
					var gird = o.ownerCt.ownerCt;
					var sm = gird.getSelectionModel();
					//sm.deselect(0);
					//alert(sm.getLastSelected().get('name'))
					//alert(sm.isSelected(0));
					//sm.selectRange(1,2,true);
					sm.selectByPosition({"row":2,"column":3});
				}
			},
			'userlist button[id=del]':{
				click:function(o){
					var gird = o.ownerCt.ownerCt;
						var data = gird.getSelectionModel().getSelection();
						if(data.length == 0){
							Ext.Msg.alert("提示","您最少要选择一条数据");
						}else{
							//1.先得到ID的数据(name)
							var st = gird.getStore();
							var ids = [];
							Ext.Array.each(data,function(record){
								ids.push(record.get('name'));
							})
							//2.后台操作(delet)
							Ext.Ajax.request({
								url:'/extjs/extjs!deleteData.action',
								params:{ids:ids.join(",")},
								method:'POST',
								timeout:2000,
								success:function(response,opts){
									Ext.Array.each(data,function(record){
										st.remove(record);
									})
								}
							})
							//3.前端操作DOM进行删除(ExtJs)
						}
				}
			},
			"userlist actioncolumn[id=delete]":{
				click : function(o,item,rowIndex,colIndex ,e){
					alert(rowIndex+" "+colIndex);
				}
			}
		});
	},
	views:[
		'List'
	],
	stores :[
		"Users"
	],
	models :[
		"User"
	] 
});
 

4.插件使用以及其它的特性使用。


(1)可编辑插件的根 Ext.grid.plugin.Editing
        Ext.grid.plugin.Editing
             Ext.grid.plugin.CellEditing  这个不讲(之前课程讲过)
             保存修改的两种办法:
             a、设立保存按钮,用户单击的时候保存数据
           
                st.sync(); //数据与后台进行同步,一般不用,他会把整个记录传到后台
                           //如果不写这句,下面的语句是得不到数据的
                var records = st.getUpdatedRecords();
                Ext.Array.each(records,function(model){
                    model.commit(); //前台的小红点会消失
                });   

                我们可以selectModel来获得修改的数据,组装后在往后台传入。
               
            b.注册edit事件
                e.record.commit(); //前台的小红点会消失
        Ext.grid.plugin.RowEditing
             使用方法:(有Bug推荐4.0.1a版本还是不要用这个功能)
             Ext.create('Ext.grid.plugin.RowEditing', {
                    clicksToEdit: 1
             })               

(2)Ext.grid.plugin.DragDrop 表格拖拽
       主意:配置有变化
       viewConfig:{
          plugins:[
            Ext.create('Ext.grid.plugin.DragDrop', {
                ddGroup:'ddTree', //拖放组的名称
                dragGroup :'userlist', //拖拽组()名称
                dropGroup :'userlist'  //释放租名称
                enableDrag:true, //是否启用
                enableDrop:true
            })]
       }       
      处理事件
      listeners: {
        drop: function(node, data, dropRec, dropPosition) {
              var st = this.getStore();
              for(i=0;i<st.getCount();i++){
                  st.getAt(i).set('index',i+1);
              }
        }
      }       

(3)Ext.toolbar.Paging 分页组件

       //第一种常用分页
       dockedItems: [{
          xtype: 'pagingtoolbar',
          store: store,
          dock: 'bottom',
          displayInfo: true
      }],
   
      //第二种分页的形式(条状,拨动分页)
      Ext.Loader.setPath('Ext.ux', '../../../extjs4/examples/ux');
      Ext.require([
          'Ext.ux.data.PagingMemoryProxy',
          'Ext.ux.SlidingPager'
      ]);   
      bbar: Ext.create('Ext.PagingToolbar', {
         pageSize: 10,
         store: store,
         displayInfo: true,
         plugins: Ext.create('Ext.ux.SlidingPager', {})  ---- 重点是这
      })   

(4)Ext.grid.property.Grid
      属性配置框面板
      当通过页面自动配置一些属性时候了可以考虑用
   
(5)列锁定
      {text:"age",dataIndex:'age',width:100,locked:true},类似于excel里的冻结功能

(6)复杂表头
       列里面又包含列(不能和字段过滤一起使用)
       columns:{
          text:'other',columns:[
            {text:"age",dataIndex:'age',width:100,locked: true},
            {text:"int",dataIndex:'index',width:100}]
        }

(7)字段过滤
    Ext.require([
        'Ext.ux.grid.FiltersFeature'
    ]);
    Ext.define("AM.class.filters",{
        alias: 'widget.filters',
        ftype: 'filters',
            encode: false,
            local: true,
            filters: [{
                    type: 'boolean',
                    dataIndex: 'visible'
                }
         ]
    })
    view层中
    features: [Ext.create("AM.class.filters")],
    列中添加配置{filterable: true,text:"age",dataIndex:'age',width:100,filter: {type: 'numeric'}}

 

 

Ext.define("AM.util.filters",{
	alias: 'widget.filters',
	ftype: 'filters',
        encode: false, 
        local: true, 
        filters: [{
                type: 'boolean',
                dataIndex: 'visible'
            }
     ]
})

 

 

Ext.define("AM.view.List",{
	extend:'Ext.grid.Panel',
	title : 'Grid Demo',//标题
	alias: 'widget.userlist',
	frame : true,//面板渲染
	width : 500,
	height: 380,
	columns : [ //列模式
				//{text:"Name",dataIndex:'name',width:100,locked:true},
				{text:"Name",dataIndex:'name',width:100},
				//{text:'others',columns:[
					{text:"age",dataIndex:'age',width:100,filterable: true,filter: {type: 'numeric'}},
					{text:"email",dataIndex:'email',width:250,
						field:{
							xtype:'textfield',
							allowBlank:false
						}
					},{
						text:'index',dataIndex:'index',width:100
					}					
				//]}
	],
	features: [Ext.create("AM.util.filters")],
	tbar :[
				{xtype:'button',text:'添加',iconCls:'table_add'},
				{xtype:'button',id:'delete',text:'删除',iconCls:'table_remove'},
				{xtype:'button',text:'修改',iconCls:'table_edit'},
				{xtype:'button',text:'查看',iconCls:'table_comm'},
				{xtype:'button',text:'save',id:'save',iconCls:'table_comm'}
	],	
	dockedItems :[{
				xtype:'pagingtoolbar',
				store:'Users',
				dock:'bottom',
				displayInfo:true,
				plugins: Ext.create('Ext.ux.SlidingPager', {}) 
	}],
	//plugins:[
//				Ext.create("Ext.grid.plugin.CellEditing",{
//					clicksToEdit : 2
//				})
//				Ext.create('Ext.grid.plugin.RowEditing', {
//           		 clicksToEdit: 1
//        		})
	//],
	viewConfig:{
		plugins:[
	        Ext.create('Ext.grid.plugin.DragDrop', {
	        	ddGroup:'ddTree', //拖放组的名称
	            dragGroup :'userlist', //拖拽组名称
	            dropGroup :'userlist',  //释放租名称
	            enableDrag:true, //是否启用
	            enableDrop:true
	        })],
		listeners: {
        	drop: function(node, data, dropRec, dropPosition) {
              		var st = this.getStore();
              		for(i=0;i<st.getCount();i++){
                  		st.getAt(i).set('index',i+1);
            		}
        	}
    	}		        
	},	
	//selType:'checkboxmodel',//设定选择模式
	//multiSelect:true,//运行多选
	store : 'Users',
	initComponent:function(){
		this.callParent(arguments);
	}
});

 

 

第六章 Tree

1. 类结构
    Ext.panel.Panel
        Ext.panel.Table
            Ext.tree.Panel --- 他是和grid完全一样的

2. 主要配置项
        title 标题
        width 宽
        height 高
        renderTo 渲染到什么地方
        root 控制根节点(Ext.data.Model/Ext.data.NodeInterface)
        animate : Boolean 控制收起和展开是发有动画效果
        store: store 数据集合
        rootVisible : false,//控制显隐的属性
    重要事件
        itemclick:function(tree,record,item,index,e,options)
    重要方法
        expandAll
        collapseAll
        getChecked
        appendChild   
       
3. Ext.data.TreeStore
    重要属性
        defaultRoodId  //指定根节点

4. 树形的拖拽(插件)
    Ext.tree.ViewDDPlugin
        alias :'plugin.treeviewdragdrop'
    需要在tree的panel下面加
        viewConfig:{
            plugins:{
                ptype :'treeviewdragdrop',
                appendOnly:true //加上这个叶子节点之间拖拽时,会弹出图形警告。
            }
        }   
    事件
        listeners:{
            drop: function(HtmlElement node, Object data, Ext.data.Model overModel, String dropPosition)
            beforedrop: function(HtmlElement node, Object data, Ext.data.Model overModel, String dropPosition, Function dropFunction)
        }

5. 关于节点的拷贝与粘贴
         重要方法
              updateInfo(把更新的节点属性值,更新显示的界面)

6. 关于删除节点操作
        重要方法
             remove(节点的方法)
       
7. 多列树的配置
         主要配置项
              columns(与表格一样)

8. 级联选中,以及级联不选中

9. 关于Store的Proxy里的api应用

 

Ext.define("AM.store.deptStore",{
	extend:'Ext.data.TreeStore',
	defaultRoodId:'root',
	proxy:{
		//Proxy里面的api属性,可以存放crud的后台url,通过前台就可以取到
		api:{
			update:"/extjs/extjs!updateDept.action",
			remove:"/extjs/extjs!delDept.action"
		}
		type:'ajax',
		url:'/extjs/extjs!getDept.action',
		reader:'json',
		autoLoad:true
	}
});

 

 

Ext.define("AM.view.deptView",{
	extend:'Ext.tree.Panel',
	alias: 'widget.deptTree',
	title : '部门树形',
	width : 250,
	height: 300,
	padding : '5 3 3 10',
	rootVisible : false,//控制显隐的属性
	config:{
		copyNodes:'' //充当剪切板的作用,临时存放树节点
	}
	//里面得配置与表格类似
	columns:[
		{
			xtype:'treecolumn',
			text:'text',
			width:150,
			dataIndex:'text'
		},{
			text:'info',
			dataIndex:'info'
		}
	],
	viewConfig:{
		plugins:{
			ptype :'treeviewdragdrop',
			appendOnly:true //加上这个叶子节点之间拖拽时,会弹出图形警告。
		}
		listeners:{
			drop:function(node,data,voerModel,dropPosition,options){
				alert("把:"+data.records[0].get('text')+"移动到:"+overModel.get('text'));
			}
			beforedrop:function(node,data,overModel,dropPosition,dropFunction){
				if(overModel.get("leaf")) //如果把一个节点拖到一个叶子节点下面时,这时我可以把叶子节点修改为费叶子节点,就可以放了。
				{
					overModel.set('leaf',true);
				}
			}
		}
	}	
	dockedItems:[{
		xtype:'toolbar',
		dock:'left',
		//ui:'footer',
		items:[
			{xtype:'button',text:'add',id:'add'},
			{xtype:'button',text:'copy',id:'copy'},
			{xtype:'button',text:'delete',id:'delete'}
			{xtype:'button',text:'delete',id:'paste'}
		]
	},{
		xtype:'toolbar',
		items:[{
			xtype:'button',
			id:'allopen',
			text:'展开全部'
		},{
			xtype:'button',
			id:'allclose',
			text:'收起全部'
		}]
	}],
	store:'deptStore'
});

 

 

Ext.define('AM.controller.deptController', {
    extend: 'Ext.app.Controller',
	init:function(){
		this.control({
			"deptTree":{
				checkchange:function(node,checked,options){
					if(node.data.leaf == false)
					{
						if(checked){
							//先展开节点
							node.expand();
							//遍历子节点,如果遇到非叶子节点,将递归遍历
							node.eachChild(function(n){
								n.data.checked = true;
								n.updateInfo({checked:true});
							})
						}else
						{
							//先展开节点
							node.expand();
							//遍历子节点,如果遇到非叶子节点,将递归遍历
							node.eachChild(function(n){
								n.data.checked = false;
								n.updateInfo({checked:false});
							})
						}else
						{
							//只要有一个叶子节点没有选中,父节点都不应该选中
							if(!checked){
								node.parentNode.data.checked = false;
								node.parentNode.updateInfo({checked:false});
							}
						}
					}
					var tree = b.ownerCt.ownerCt;
					//得到选中数据集合
					var nodes = tree.getChaecked();
					for(i=0;i<nodes.length;i++)
					{
						nodes[i].remove(true); //删除该节点
					}
			},
		    "deptTree button[id=delete]":{
				click:function(b,e){
					var tree = b.ownerCt.ownerCt;
					//得到选中数据集合
					var nodes = tree.getChaecked();
					for(i=0;i<nodes.length;i++)
					{
						nodes[i].remove(true); //删除该节点
						//通过ajax向后台提交删除数据
						
						//通过这种方式也是可以自动提交到后台的,不过数据可能不是你所需要的。
					    //tree.getStore().getProxy().update(new Ext.data.Operation(
							//{action:'remove'} //你写什,它就会提交那个url,eg:{action:'update'}
						//));
						
						//自己组装参数Ajax的提交(常用)
						Ext.Ajax.request({
							//通过这种方式就可以直接获取到store里面配置的url
							//避免url到处乱写
							//其实就是利用了store的proxy里面已经有的api属性来存放url集合
							url: tree.getStore().getProxy().api['remove'],
							params: {
								id: nodes[i].data.id
							},
							success: function(response){
								var text = response.responseText;
								// process server response here
							}
						});
					}
			},
			"deptTree button[id=copy]":{
				click:function(b,e){
					var tree = b.ownerCt.ownerCt;
					//得到数据集合
					var nodes = tree.getChaecked();
					if(nodes.length>0){
						//把数据放到剪切板中
						tree.setCopyNodes(Ext.clone(nodes));
						for(i=0;i<nodes.length;i++)
						{
							nodes[i].data.checked = false; //这个只是更新节点的属性值,并没有更新显示到页面
							nodes[i].updateInfo();//更新显示到页面
						}
					}
				}			
			},
			"deptTree button[id=paste]":{
				click:function(b,e){
					var tree = b.ownerCt.ownerCt;
					//获得被追加孩子的节点集合
					var checkNodes = tree.getChecked();
					//去剪切板中取数据
					var nodes = tree.getCopyNodes();
					if(checkNodes.length == 1 && nodes.lenght > 0){
						// 被追加孩子的节点
						var node  = checkNodes[0];
			
						for(i=0;i<nodes.length;i++){
							var el = nodes[i].data;
							//在这里可以进行组装数据传入后台
							node.appendChild(el);
						}

					}else{
						alert("剪切板中没有数据或没有选中节点");
					}
				}			
			},
		
			"deptTree button[id=allopen]":{
				click:function(b,e){
					var tree = b.ownerCt.ownerCt;
					tree.expandAll();
				}			
			},			
			"deptTree button[id=allclose]":{
				click:function(b,e){
					var tree = b.ownerCt.ownerCt;
					tree.collapseAll();
				}			
			},
			"deptTree button[id=add]":{
				click:function(b,e){
					var tree = b.ownerCt.ownerCt;
					var nodes = tree.getChecked();
					if(nodes.length == 1){
						var node = nodes[0];
						node.appendChild({
							checked:true,
							text:'技术架构组',
							id : '0103',
							leaf:true		
						});
					}else{
						alert("请您选择一个节点");
					}
				}
			},
			"deptTree":{
				itemclick:function(tree,record,item,index,e,options){
					alert(record.get('id'));
				}
			}
		});
	},
	views:[
		'deptView'
	],
	stores :[
		'deptStore'
	],
	models :[
	] 
});
 

第七章 Form组件

1.根类
      Ext.form.Basic
      提供了表单组件,字段管理,表单提交,数据加载的功能
2.表单的容器
      Ext.form.panel
      容器自动关联 Ext.form.Basic的实例对象,更方便的进行字段的配置
      重要属性
          defautType : "" (设置默认子项的xtype)
3.数据交互和加载
      Ext.form.action.Action(两种表单自身的提交方式)
          Ext.from.action.Submit Ajax方式提交
              Ext.form.action.StandardSubmit 原始鼻癌单提交方法
          Ext.form,action.DirectLoad
              Ext.form.action.DirectSubmit 类似于dwr的方式提交
4.字段的类型
      Ext.form.field.Base 根类
          混入了的类[Ext.form.field.Field]得到表单的处理功能
          混入了的类[Ext.form.Labelable]得到表单标签错误信息提示功能
          Ext.form.field.Text 文本框方式的如下:
              Ext.form.field.TextArea 富文本域
              Ext.form.field.Trigger 触发器
                  Ext.form.field.Picker 触发器子类(选择器)
                      Ext.form.field.Time
                      Ext.form.field.Date
                      Ext.form.field.Number
                      Ext.form.field.file 文件上传
                      Ext.form.field.ComboBox 选择框
              Ext.form.field.Checkbox 选择框方式的
                  Ext.form.field.Radio 单选框
              Ext.form.field.Hidden 特殊的--隐藏字段(数据页面不显示,但后台需要)
      Ext.form.field.HtmlEditor 特殊的--文本编辑框
5.其中夹杂布局的类
      Ext.form.FieldContainer
          Ext.form.CheckboxGroup
              Ext.form.RadioGroup
      Ext.form.Label
          Ext.form.Labelable
      Ext.form.FieldSet
      Ext.form.fieldContainer (里面可以放多个表单项,进行统一布局)
6.常用的组件配置
      Ext.form.Panel
          重要的配置项
              title:'',
              bodyStyle:'',
              frame:true,
              height:122,
              width:233,
              renderTo:'',
              defaultType:'',
              defaults:{
                  allowBanlk:true,
                  msgTarget:'side',
                  pageSize:4  //配置这个参数即可在下拉框内一分页的形式操作数据
              },
              由于混入了Ext.form.labelable所以可进行如下配置;
                  labelSeparator 字段的名称与值直之间的分隔符
                  labelWidth 标签宽度         
      Ext.form.field.Text 文本框(xtype:textfield)
          重要配置项
              width:156,
              allowBlank:false,//不能为空
              labelAlign:'left',
              msgTarget:'side' //在字段的幼斌展示提示信息
              grow:false,//是否在这个表单字段规定长度内,自动根据文字的内容进行伸缩
              selectOnFocus:true, //当字段的内容得到焦点的时候,选择所有文本
              regex : /\d+/g,
              regexText : '请输入数字',
              inputType:'password',//其它类型:email、url等。默认text
              //vType:'IPAddress'用于数据校验,Ext.form.field.VTypes
              //如果校验不是你想要的,可以自定义,如下:
              //custom Vtype for vtype:'IPAddress'
                Ext.apply(Ext.form.field.VTypes, {
                    IPAddress:  function(v) {
                        return /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v);
                    },
                    IPAddressText: 'Must be a numeric IP address',
                    IPAddressMask: /[\d\.]/i //不符合正则的,键盘整么输入,都不起作用
                });
      Ext.form.field.Number
          重要的配置项
              allowDecimals:false,//不能输入小数
              hideTrigger:true,//隐藏框帮边的调节按钮   
              decimalPrecision : 3,//自动四舍五入,保留小数位为3位。
              emptyText:'请输入小数'//默认框内灰色提醒
              //指定范围
              minValue:10,
              maxValue:100,   
              baseChars:'01',//表示框内只能输入0和1       
              step:'0.8',//指定步长
             
      Ext.form.field.ComboBox
          Ext.view.BoundList 约束列表
          重要属性
              listConfig:{
                //规划下拉框到底是什么样的样式
                //这里面的值是根据BoundList里面的属性进行初始化的
                getInnerTpl:function()
                {
                    return "<div style='color:red'>${name}</div>";//动态改变下拉框内容样式
                }
              }
              queryMode:'remot', //local(本地数据)|remot(远程数据)
              valueFiled:'id',//后台需要
              displayField:'name'//页面显示的
              forceSelection:true, //必须选中数据集合中有的数据
              minChars:2,//表示输入2个字符的的时候,就到后台请求数据
              queryDelay:400,
              queryParam:'name',//指定往后台传入的参数名称,对应的参数值是你输入的参数
              multiSelect:true, //允许多选
              typeAhead:true,   //自动补全
      Ext.form.field.Date
          重要属性
              disableDays:[0,6] //周日与周六不能选为灰色
7.常用事件
      当字段类型为xtype:'triggerfield',它具有onTriggerClick事件,
      经常用于从其它弹出表格中选择某个值。             
                 
8.常用操作   
      获取表单中某项的值
          var fieldValue = Ext.getCmp('表单id').getForm().findField('字段名称').getValue();     
         
      自动填充表单的各项值
        loadRecord( Ext.data.Model record) : Ext.form.Basic
        Loads an Ext.data.Model into this form by calling setValues with the record data. See also trackResetOnLoad.

 

第八章 layout

1.面板
    (1)类结构
        Ext.Base
        Ext.AbstractComponent
            Ext.Component
                Ext.container.AbstractContainer
                    Ext.container.Container
                        Ext.panel.AbstractPanel
                            Ext.panel.Panel
    (2)常见子类
        Ext.window.Window
        Ext.form.panel  ---form的panel
        Ext.panel.Table ---grid的panel
        Ext.tab.Panel   ---标签页的panel
        Ext.menu.Menu
        Ext.tip.Tip
        Ext.container.ButtonGroup
    (3)组成面板的部件
           底部工具栏,顶部工具栏,面板头部,面板底部,面板体
          
2.布局
    (1) Auto自动布局(Ext.layout.container.Auto)
        默认为自动布局,采用布局布局的模式与HTML流式排版类似
    (2) Fit自适应布局(Ext.layout.container.Fit)
        面板里有且只有一个其它面板资源元素,并且填满整个body
    (3) Accordion折叠(即手风琴)布局(Ext.layout.container.Accordion)
        同时会初始化多个面板,当一个面板处于打开状态时,其它面板会处于收起状态
    (4) Card卡片布局(Ext.layout.container.Card)
        它和手风琴布局类似,也有多个面板;不同之处在于他用按钮来切换(常用于导航)
    (5) Anchor描点布局[Ext.layout.container.Anchor]
        根据容器的大小,自适应来为容器的子元素进行布局和定位
            A.百分比
            B.偏移量
            C.参考离边的距离定位
    (6)    多选框布局[Ext.layout.container.CheckboxGroup]
    (7) Column列布局[Ext.layout.container.Column]
        列风格的布局,每一列的宽度可以根据百分比或固定数据来控制
    (8) Table表格布局[Ext.layout.container.Table]
        和传统的HTML的Table布局方式一样,同样具有跨列,跨行的属性。
    (9) Absolute绝对布局[Ext.layout.container.Absolute]
        格局容器X、Y轴的方式绝对定位
    (10) Border边界布局[Ext.layout.container.Border]
         可以控制上、下、左、右、中 (通常用于页面框架的规划)
    (11) 盒子布局
         Ext.layout.container.Box
            Ext.layout.container.HBox 竖排
            Ext.layout.container.VBox 横排
         重要参数
            Box
                flex 具有配置flex的子项,会根据占有剩余总量的比值,来决定自己的大小
                pack 控制子元素展示的位置(start左面--这时候flex生效,center中间,end后面)
                padding 边距
            HBox
                align[top,middle,stretch,stretchmax]
            VBox
                align[left,center,stretch,stretchmax]
               
3.面板常用的配置属性
    Ext.panel.Panel
        (1) closable:true //启用关闭功能
        (2) closeAction:'destroy' //设置关闭窗口后的对象处理[destroy销毁面板|hide隐藏面板]
        (3) hideCollapsible:true  //启用面板隐藏面板体功能
        (4) collapsible:true      //是否展开面板体
        (5)
4.Ext.tab.Panel标签页,一种特殊的布局方式
    常用方法
        setActiveTab( Ext.Component card) 设置当前显示的标签页

 

第九章 chart


1.关于图表
    图表的轴(axes)
        (1) 数值轴 Ext.chart.axis.Numeric
        (2) 时间轴 Ext.chart.axis.Time
        (3) 分类轴 Ext.chart.axis.Category
        (4) 仪表轴 Ext.chart.axis.Gauge
    图表的类型
        (1) 折线图 Ext.chart.series.Line
        (2) 柱形图 Ext.chart.series.Column
        (3) 饼状图 Ext.chart.series.Pie
        (4) 条形图 Ext.chart.series.Bar
        (5) 面积图 Ext.chart.series.Area
        (6) 雷达图 Ext.chart.series.Radar
        (7) 散点图 Ext.chart.series.Scatter
        (8) 仪表图 Ext.chart.series.Gauge
    常用属性
        highlight高亮,label标题,tips提示,renderer格式化

 

 

最后 : 学习笔记到这里就要告一段落了

 

 

 

 

  • 大小: 102.5 KB
分享到:
评论

相关推荐

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制,快速反馈与教程包含,三菱FX3G FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转,停止,频率的设定,频率,电流等的读取。 反馈快,使用方便,包括教程,plc和触摸屏程序,变频器参数设置和接线,别的变频器支持rtu协议也可以实现。 ,三菱FX系列PLC; 485协议通讯; 变频器E700; 通讯控制; 参数设置; 教程。,三菱PLC控制E700变频器:485协议通讯与程序设置全解

    hyphen-nl-0.20050617-10.el7.x64-86.rpm.tar.gz

    1、文件内容:hyphen-nl-0.20050617-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/hyphen-nl-0.20050617-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏程序协同运作。,西门子S7-1200PLC结构化编程5轴伺服项目 ,包含plc程序、威纶通触摸屏程序、cad电气图纸。 可以实现以下功能,规格有: 1.三轴机械手X轴-Y轴-Z轴联动取放料PTO脉冲定位控制台达B2伺服 2.台达伺服速度模式应用+扭矩模式应用实现收放卷 3.程序为结构化编程,每一功能为模块化设计,功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警. 4.每个功能块可以无数次重复调用,可以建成库,用时调出即可 5.上位机采样威纶通触摸屏 6.参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维。 博图14以上都可以打开 ,核心关键词:西门子S7-1200PLC; 结构化编程; 5轴伺服项目; PLC程序; 威纶通触摸屏程序; CAD电气图纸; 三轴机械手; PTO脉冲定位控制; 台达B2伺服; 速度模式应用; 扭矩模式应用; 模块化设计; 轴断电保

    情感分析算法的关键应用领域与典型实战案例

    情感分析算法在多个领域有着广泛的应用场景和丰富的案例

    基于MATLAB仿真的MMC整流站与逆变站柔性互联技术研究:快速工况仿真与环流抑制控制,基于MATLAB仿真的MMC整流站与逆变站运行分析及四端柔性互联工况仿真模拟研究,21电平MMC整流站、MMC逆

    基于MATLAB仿真的MMC整流站与逆变站柔性互联技术研究:快速工况仿真与环流抑制控制,基于MATLAB仿真的MMC整流站与逆变站运行分析及四端柔性互联工况仿真模拟研究,21电平MMC整流站、MMC逆变站、两端柔性互联的MATLAB仿真模型,4端柔性互联、MMC桥臂平均值模型、MMC聚合模型(四端21电平一分钟即能完成2s的工况仿真) 1-全部能正常运行,图四和图五为仿真波形 2-双闭环控制,逆变站PQ控制,整流站站Udc Q控制 3-最近电平逼近调制+子模块电容充电 4-环流抑制控制 ,1. 21电平MMC整流站; 2. MMC逆变站; 3. MATLAB仿真模型; 4. 两端柔性互联; 5. 桥臂平均值模型; 6. 聚合模型; 7. 双闭环控制; 8. 最近电平逼近调制; 9. 子模块电容充电; 10. 环流抑制控制。,基于柔性互联的MMC系统仿真模型:多电平控制与环流抑制研究

    有效应对网络舆情教育培训PPT.pptx

    有效应对网络舆情教育培训PPT.pptx

    高光谱解混和图片去噪 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    【轴承压力】基于matlab GUI止推轴承压力计算【含Matlab源码 12069期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    娱乐小工具微信小程序源码下载支持多种流量主.zip

    淘宝买的,直接分享给大家了,没有测试环境,也没有办法去测。但我想,他应该是可以用的

    基于A、RBFS 和爬山算法求解 TSP问题 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    ACM比赛经验分享(基础知识与算法准备等).zip

    ACM比赛经验分享(基础知识与算法准备等)

    基于matlab平台的芯片字符识别.zip

    运行GUI版本,可二开

    比例-积分-微分 (PID) 鲁棒控制及电流反馈以确保 UPS 的稳定性 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    机器学习(预测模型):包含恶意网址的数据库或数据集

    该是指包含恶意网址的数据库或数据集,它通常被用于网络安全研究、恶意软件检测、网络欺诈防范等领域。研究人员和安全专家会利用这个数据集来分析恶意网址的特征、行为模式,进而开发出相应的检测算法和防护措施,以识别和阻止恶意网址对用户设备和网络环境造成的潜在威胁。该数据集包含约 651,191 条经过标记的 URL,涵盖了四种主要类型:良性(Benign)、篡改(Defacement)、钓鱼(Phishing)和恶意软件(Malware)。其中,良性 URL 占据了约 428,103 条,篡改 URL 有 96,457 条,钓鱼 URL 为 94,111 条,而恶意软件 URL 则有 32,520 条。该数据集的显著特点是其多类别分类的全面性,不仅包括常见的恶意 URL 类型,还涵盖了大量良性 URL,使得研究人员能够更全面地理解和区分不同类型的 URL。此外,数据集以原始的 URL 形式提供,研究人员可以根据需要提取和创建特征,而不受预设特征的限制。

    集字卡v4.3.4微信公众号原版三种UI+关键字卡控制+支持强制关注.zip

    字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您

    DSP28035的CAN通信升级方案:包括源码、测试固件与C#上位机开发,支持周立功USBCAN-II兼容盒及BootLoader闪烁指示,DSP28035的CAN升级方案及详细配置说明:使用新动力开

    DSP28035的CAN通信升级方案:包括源码、测试固件与C#上位机开发,支持周立功USBCAN-II兼容盒及BootLoader闪烁指示,DSP28035的CAN升级方案及详细配置说明:使用新动力开发板与C#上位机软件实现固件升级,涉及用户代码、BootLoader代码及硬件连接细节,DSP28035的can升级方案 提供源代码,测试用固件。 上位机采用c#开发。 说明 一、介绍 1、测试平台介绍:采用M新动力的DSP28035开发板,CAN口使用GPIO30\31。波特率为500K。 2、28035__APP为测试用的用户代码,ccs10.3.1工程,参考其CMD配置。 3、28035_Bootloader_CAN为bootloader源代码,ccs10.3.1工程; 4、SWJ为上位机,采用VS2013开发,C#语言。 5、测试使用的是周立功的USBCAN-II,can盒,如果用一些国产可以兼容周立功的,则更这里面的ControlCAN.dll即可。 6、升级的app工程需要生成hex去升级,具体参考我给的工程的设置。 7、BootLoader代码,只有D400这一个灯1s闪烁一

    基于Matlab的数字验证码识别系统:预处理与不变矩算法的实践应用及GUI界面构建,基于MATLAB不变矩算法的数字验证码识别系统设计与实现,基于matlab不变矩算法实现数字验证码 过程:先对验证图

    基于Matlab的数字验证码识别系统:预处理与不变矩算法的实践应用及GUI界面构建,基于MATLAB不变矩算法的数字验证码识别系统设计与实现,基于matlab不变矩算法实现数字验证码 过程:先对验证图像进行去噪、定位、归一化等预处理,然后计算待识别数字的不变矩,再进行特征匹配,得到识别结果。 以Matlab软件为开发平台来进行设计实现及仿真,并构建相应的GUI界面。 实验结果表明利用不变矩在识别数字验证码方面具有可行性。 ,关键词:Matlab;不变矩算法;数字验证码;预处理;特征匹配;GUI界面;实验验证;可行性。,Matlab实现数字验证码识别:预处理与不变矩算法的GUI仿真

    基于STM32F103的磁编码器通讯方案:原理图、PCB设计与源码实现,附多摩川协议手册解析,基于STM32F103的精准多摩川绝对值磁编码器通讯解决方案:原理图、PCB设计与源码实践手册,完整包含多

    基于STM32F103的磁编码器通讯方案:原理图、PCB设计与源码实现,附多摩川协议手册解析,基于STM32F103的精准多摩川绝对值磁编码器通讯解决方案:原理图、PCB设计与源码实践手册,完整包含多摩川协议解析,基于STM32F103的多摩川绝对值磁编码器通讯方案 包含:原理图,PCB,源码,多摩川协议手册 ,核心关键词:STM32F103;多摩川绝对值磁编码器;通讯方案;原理图;PCB;源码;多摩川协议手册;,基于STM32F103的绝对值磁编码器通讯方案:原理图PCB与源码解析,附多摩川协议手册

    基于 BP 神经网络特征提取的指纹识别应用 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    php项目之学生成绩查询系统源码.zip

    php项目之学生成绩查询系统源码,项目仅供学习参考使用

Global site tag (gtag.js) - Google Analytics