新手指南--查看文章
 
第 7 章 低鸣吧!拖拽就像呼吸一样容易。
发布时间:2008-3-6

7.1. 如此拖拽,简直就像与生俱来的本能一样。

 

你可以拖拽grid里的行,让它们按你的方式去排列。

你可以拖拽tree里的节点,把节点从一个枝干拖向另一个枝干。

grid和tree之间,也可以拖动。

layout的split也是一种拖动,改变布局的大小。

resize也算是拖动,改变大小。

7.2. 第一!乱拖。

 

一直认为拖动很复杂,可实际上只需要一条语句就可以了。

new Ext.dd.DDProxy('block');

然后看看html里的部分

<div id="block" style="background: red;">&nbsp;</div>

如果不做任何标记,我们根本什么都看不到,所以我给加上了红色背景颜色。现在你可以乱拖了。

截图里的红条条可以随便拖,实际看例子吧。lingo-sample/1.1.1/07-01.html,2.0里用法一样,lingo-sample/2.0/07-01.html。

7.3. 第二!代理proxy和目标target

 

实际上我们刚才看到了DDProxy可以随便拖,另外一个DDTarget是不能拖动的,这东西是用来放DDProxy的一个区域。看一看继承体系图可能有助于我们的理解。

简单来说,左边都是可以随你的鼠标拖动的,拖动起来以后,直接把他们扔到右边那些定义好的区域就好了。proxy是可拖动对象,target是拖动的目的地。

在知道了是与非之后,我们要验证一下自己的理念了。

proxy是我们要拖来拖去的东西。

var proxy = new Ext.dd.DragSource('proxy', {group:'dd'});

target告诉用户,他应该把上边的proxy放到哪里

var target = new Ext.dd.DDTarget('target', 'dd');

注意到两者之中相同的dd了吗?这是个分组标志,咱们通过这个限制用户不会像第一节那样,把proxy乱扔到任何地方。只有相同组名的目的地才能接收它,好比你只能把超市货架上的商品放进篮子,而不能满地乱扔一样。

不过这也仅仅是拖拽而已,没有任何效果不是很不爽吗?让我们加入一些小技巧吧,可以让拖拽显得更神奇一些。

proxy.afterDragDrop = function(target, e, id) {
var destEl = Ext.get(id);
var srcEl = Ext.get(proxy.getEl());
srcEl.insertBefore(destEl);
};

这个函数是说,在dragdrop之后,会执行这个函数,然后通过id获得target,根据proxy.getEl()获得proxy,然后把proxy添加到target的前头,看起来是放在里边了。

好,脚本都组织好了,打开页面看看效果吧。

当然,为了让画面花花绿绿的,咱们加了不少css样式,稍微给你们看一下吧,省得那些不愿意交钱的人说咱们的截图是用photoshop画的。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>dd</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../../ext-all.js"></script>
<style type="text/css">
HR {
clear: both;
visibility: hidden
}
.block {
border: 1px red solid;
margin: 10px;
min-height: 80px;
}
.item {
border: 1px green solid;
background: green;
float: left;
margin:10px;
width: 50px;
min-height: 50px;
text-align: center;
}
</style>
<script type="text/javascript">
Ext.onReady(function(){

var proxy = new Ext.dd.DragSource('proxy', {group:'dd'});

proxy.afterDragDrop = function(target, e, id) {
var destEl = Ext.get(id);
var srcEl = Ext.get(proxy.getEl());
srcEl.insertBefore(destEl);
};

var target = new Ext.dd.DDTarget('target', 'dd');

});
</script>
</head>
<body>
<script type="text/javascript" src="../examples.js"></script>
<div id="proxy" class="item">item</div>
<hr />
<div id="target" class="block">
<hr />
</div>
</body>
</html>

好了,其实你也可以在lingo-sample/1.1.1/07-02.html看到咱们的例子。很高兴的是,lingo-sample/2.0/07-02.html跟它完全一样。

7.4. 再拖!再拖拖。

 

还有JsonView啦,DataView什么的,都可以拖,但渲染的时候更见方便,这些等于是Template和Store的一种结合体制。

未完待续



 [新手指南]ExtJS2.0开发与实践笔记[0]——初识ExtJS (未知,08-19)
ExtJS2.0开发与实践笔记[0]——初识ExtJS简短的前言:随着网络技术的发展,良好的用户体验及丰富的客户端功能已成为Web程序所共同追逐的目标,并扮演非常重要的一环。基于Ajax应用思想的盛行,prototype、ext、dojo、yui、mootools等越来越多的第三方开源Javascr……

 [新手指南]ExtJs2.0学习系列Ext.MessageBox (http://b…,11-30)
大家都知道,刚开始搞extjs的时候,很是有点困难,所以本人在新手刚入门后准备了这个系列的文章。个人认为用extjs做后台很不错,布局比较完美!1.Ext.MessageBox.alert()方法      有四个参数,为简单起见,主要介绍前面三个参数:&nb……

 [新手指南]第十二篇,Ext组件系列之--如何获取后台返回的自定义错 (myext整理,04-05)
何获取后台返回的自定义错误信息和系统异常信息 这里暂时不讨论是否应该在前台显示后台的异常信息其实 我还是能够理解这个朋友的要求的 想调试方便查看而已下面就做了这个小例子在以前 我经常会在后台返回成功或者失败的信息:简单的就是返回0或者1 直接response.write({flag:0}),或者re……

 [新手指南]构建EXT应用六:为表单添加提交事件 (myext整理,04-11)
为表单添加提交事件在上面的表单中,我们放置了三个按钮,分别是添加、清空和删除。首先我们为添加按钮添加事件,为它的handler参数指定一个处理函数,如代码清单12-12所示。代码清单12-12 表单按钮的单击事件{text: 添加,handler: function() {if (!form.get……

 [新手指南]Ext.data专题六:常用Reader (myext整理,04-11)
1 ArrayReader从proxy中读取的数据需要进行解析,这些数据转换成Record数组后才能提供给Ext.data. Store使用。ArrayReader的作用是从二维数组里依次读取数据,然后生成对应的Record。默认情况下是按列顺序读取数组中的数据,不过你也可以考虑用mapping指定……

 


©2008 MyExt.cn
本站文章来自互联网,仅供学习和研究使用,如有版权问题,请发送Email:myext@126.com.