跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)
跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)
在Grid.js中的initComponent函数中添加
this.viewConfig = {
stripeRows : true, // 奇偶行不同底色
enableTextSelection : false,
// 增加同意拖动功能
plugins : [{
ptype : 'gridviewdragdrop',
ddGroup : 'DD_grid_' + viewModel.get('tf_moduleName'), // 拖动分组必须设置,这个分组名称为:DD_grid_Global
enableDrop : false // 设为false,不同意在本grid中拖动
}]
};
来同意Grid能够进行单行或多行的拖动操作,ddGroup是一个分组,最好是设置成唯一的。enableDrop在这里设置为false , 假设设置成true,那么就能够拖动改变记录的位置,这个功能也是比較实用的,比如一个模块中有一个tf_orderId 顺序号的字段,拖动以后能够自己主动改变顺序号。那对记录的排序将是很方便的。这个功能以后会讲到。
{
text : '删除',
disabled : true,
glyph : 0xf014,
itemId : 'deletebutton',
listeners : {
click : 'deleteRecords', // 这里不要用handler,而要用click,由于以下要发送click事件
// 删除按钮在渲染后增加能够Drop的功能
render : function(button) {
// 能够使Grid中选中的记录拖到到此按钮上来进行删除
button.dropZone = new Ext.dd.DropZone(button.getEl(), {
// 此处的ddGroup须要与Grid中设置的一致
ddGroup : 'DD_grid_' + viewModel.get('tf_moduleName'),
// 这个函数没弄明确是啥意思,没有还不行
getTargetFromEvent : function(e) {
return e.getTarget('');
},
// 用户拖动选中的记录经过了此按钮
onNodeOver : function(target, dd, e, data) {
return Ext.dd.DropZone.prototype.dropAllowed;
},
// 用户放开了鼠标键,删除记录
onNodeDrop : function(target, dd, e, data) {
button.fireEvent('click', button); // 运行删除按钮的click事件
}
})
}
}
}
尽管没有几条语句。要写出来还真是不easy。以下三个图演示了三个过程:拖动、放下、运行click事件。
Grid中的拖动代码已经有了。仅仅要在“新增”button上加上drop的代码就可以。
{
text : '新增',
xtype : 'splitbutton',
itemId : 'new',
glyph : 0xf016,
menu : [{
text : '复制新增',
tooltip : '新增时先将当前记录添入到新记录中',
itemId : 'newwithcopy',
listeners : {
click : 'addRecordWithCopy'
},
glyph : 0xf0c5
}, '-', {
text : '上传Excel表单条新增',
tooltip : '依据指定的excel表添好数据后。上传新增一条记录',
glyph : 0xf062
}, {
text : '上传Excel表批量新增',
tooltip : '依据下载的Excel表中的要求加入数据后,上传批量新增数据',
glyph : 0xf062
}],
listeners : {
click : 'addRecord', // 这里不要用handler。而要用click,由于以下要发送click事件
// 删除按钮在渲染后加入能够Drop的功能
render : function(button) {
// 能够使Grid中选中的记录拖到到此按钮上来进行复制新增
button.dropZone = new Ext.dd.DropZone(button.getEl(), {
// 此处的ddGroup须要与Grid中设置的一致
ddGroup : 'DD_grid_' + viewModel.get('tf_moduleName'),
getTargetFromEvent : function(e) {
return e.getTarget('');
},
// 用户拖动选中的记录经过了此按钮
onNodeOver : function(target, dd, e, data) {
return Ext.dd.DropZone.prototype.dropAllowed;
},
// 用户放开了鼠标键。删除记录
onNodeDrop : function(target, dd, e, data) {
var b = button.menu.down('#newwithcopy');
b.fireEvent('click', b);
}
})
}
}
}
复制新增的事件放在ModuleController.js中。
// 依据选中的记录复制新增一条记录
addRecordWithCopy : function() {
var grid = this.getView().down('modulegrid'), sm = grid.getSelectionModel();
if (sm.getSelection().length != 1) {
Ext.toast({
title : '警告',
html : '请先选择一条记录,然后再运行此操作! ',
saveDelay : 10,
align : 'tr',
closable : true,
minWidth : 200,
useXAxis : true,
slideInDuration : 500
});
return;
}
var model = Ext.create(grid.getStore().model);
Ext.Array.each(model.fields, function(field) { // 将选中记录的model都赋给值新的记录
model.set(field.name, sm.getSelection()[0].get(field.name));
});
model.set('tf_id', null); // 设置为null,可自己主动添加
grid.getStore().insert(0, model);
sm.select(model); // 选中当前新增的记录
}
经过以上步骤,你能够运行新增菜单里的复制新增,也能够拖动一条记录到“新增”button上来新增一条记录。
这几节源代码修改得也比較多,假设跟着做有问题的话,下节会公布前20节的源代码,自行下载了研究吧。
跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)的更多相关文章
- 跟我一起学extjs5(11--自己定义模块的设计)
跟我一起学extjs5(11--自己定义模块的设计) 从这一节開始我们来设计并完毕一个自己定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息. 下面信息仅仅是我自己在开发过程中 ...
- 跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])
跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据]) 写了几个月,总算有点盼头了,最终要从后台取得数据了.后台的spring mvc 和 service 仅仅能简单的 ...
- 跟我一起学extjs5(42--单个模块的数据新增方式)
跟我一起学extjs5(42--单个模块的数据新增方式) 前面的章节中已经增加了一个自己定义的模块,而且能够进行数据的新增.改动.删除的操作了,在这个基础上就能够大作文章了. 这一节来 ...
- 跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)
跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块) 上面设计好了一个模块的主界面,以下通过菜单命令的运行来把这个模块增加到主界面其中. 在MainModule. ...
- 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增
网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好“拖放”这个东西真是很难,特别是象我这样英语不好的人,看不太懂官网上的说明,做一 ...
- 跟我一起学extjs5(22--模块Form的自己定义的设计)
跟我一起学extjs5(22--模块Form的自己定义的设计) 前面几节完毕了模块Grid的自己定义,模块Form自己定义的过程和Grid的过程类似,可是要更复杂一些.先来设计一下要完 ...
- 跟我一起学extjs5(18--模块的新增、改动、删除操作)
跟我一起学extjs5(18--模块的新增.改动.删除操作) 上节在Grid展示时做了一个金额单位能够手工选择的功能,假设你要增加其它功能.也仅仅要依照这个模式来操作即可了,比方说你想 ...
- 跟我一起学extjs5(24--模块Form的自己定义的设计[2])
跟我一起学extjs5(24--模块Form的自己定义的设计[2]) 在本节中将要增加各种类型的字段,在增加字段的时候因为能够一行增加多个字段,因此层次结构又多了一层fieldcont ...
- 跟我一起学extjs5(16--各种Grid列的自己定义渲染)
跟我一起学extjs5(16--各种Grid列的自己定义渲染) Grid各列已经可以展示出来了.列的类型包含字符型,整型,浮点型,货币型,百分比型,日期型和布尔型,我自己定义了各种类型 ...
随机推荐
- smtp cmd 测试 smtp发送邮件 cmd发送邮件
无账户MAIL FROM:<test@rmvbdy.com>RCPT TO:2850965781@qq.comDATASubject: test messagetest body . 有账 ...
- poj2823_单调队列简单入门
题目链接:http://poj.org/problem?id=2823 #include<iostream> #include<cstdio> #define M 100000 ...
- c语言函数---M
书画小说软件 制作更满意的读.更舒心的写.更轻松的公布 最全古典小说网 由本软件公布所得 main()主函数 每一C 程序都必须有一main()函数, 能够依据自己的爱好把它放在程序的某 个地方.有些 ...
- 达内TTS6.0课件oop_day05
- 8月9日,PS、计算机基础(预科)
一. PS 掌握简单的图标修改. 1.图层 2.保存PSD格式,有图层:JPG格式,没有图层. 3.魔棒工具(调整值 ...
- 创建自己的yum软件源(以Cloudera Hadoop的安装为例)
.下载Cloudera Manager安装文件 Cloudera Manager的可以从如下网址获得: http://archive.cloudera.com/cm4/installer/ 这里选择C ...
- IOS UITextField &UITextView
UITextField 限制textField长度 曾经,以为输入框只是输入字符的,但真的认真为一个登陆界面输入框而改了六七次以后,发现好烦人啊,先谢谢测试的不厌其烦,不杀之恩,不想再用IOS的输入框 ...
- mysql数据库中列转行
今天突然想到了数据库中的行专列与列转行,还不熟悉,在上网看了一下然后就自己写了个例子. 数据库表示这样滴! //全部查询出来SELECT (case type when 'MySql数据库' then ...
- 利用merge存储引擎来实现分表
我觉得这种方法比较适合,那些没有事先考虑,而已经出现了得,数据查询慢的情况.这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了,现在一张表要分成几十 ...
- JavaScript 网页链接调用Android程序
如何让网页链接实现启动Android的应用,网上有说重写WebView相关的shouldOverrideUrlLoading方法,但是这种理论上能实现,因为你的网页不是仅仅被你自己的webview来浏 ...