- 浏览: 201064 次
- 性别:
- 来自: 苏州
文章分类
最新评论
1./**
2. * 项目树
3. */
4.Divo.app.Project = function() {
5. /* ----------------------- private变量 ----------------------- */
6. var treeEl = 'project-tree';
7.
8. var tree, root, treeEditor, root, ctx, ctxNode;
9. var adding, editing;
10. var seed = 0;
11.
12. /* ----------------------- private方法 ----------------------- */
13. // 创建项目树
14. function createTree() {
15. var xt = Ext.tree;
16. tree = new xt.TreePanel( {
17. el : treeEl,
18. animate : true,
19. enableDD : false,
20. containerScroll : true,
21. lines : false,
22. rootVisible : false,
23. root : new Ext.tree.TreeNode()
24. });
25. root = tree.root;
26.
27. var o;
28. BasisFacade.findAllProjects( {
29. callback : function(retValue) {
30. o = retValue;
31. },
32. async : false
33. });
34. if (o) {
35. for (var i = 0;i < o.length; i++) {
36. var n = new xt.TreeNode( {
37. id : o[i].id,
38. text : o[i].name,
39. leaf : true
40. });
41. root.appendChild(n);
42. }
43. }
44.
45. var selModel = tree.getSelectionModel();
46. selModel.on('selectionchange', onNodeSelected, this, true);
47.
48. tree.on('contextmenu', onContextShow, this);
49. // tree.render();
50. // root.expand();
51. }
52.
53. // 创建TreeEditor
54. function createTreeEditor() {
55. var xt = Ext.tree;
56.
57. treeEditor = new xt.TreeEditor(tree, {
58. allowBlank : false,
59. blankText : '请输入项目名称',
60. selectOnFocus : true
61. });
62.
63. treeEditor.on("complete", onNodeEdited, this, true);
64. }
65.
66. // 开始新建项目
67. function onAddNode() {
68. var node = new Ext.tree.TreeNode( {
69. text : '项目' + (++seed),
70. id : 'c1'
71. });
72. adding = true;
73.
74. root.appendChild(node);
75. root.expand();
76. node.select();
77. root.lastChild.ensureVisible();
78. treeEditor.triggerEdit(node);
79. }
80.
81. // 开始修改项目名称
82. function onUpdateNode() {
83. if (!ctxNode) {
84. Divo.say("请先选择某个项目");
85. return;
86. }
87. treeEditor.triggerEdit(ctxNode);
88. }
89.
90. // 删除项目
91. function onDeleteNode() {
92. if (!ctxNode) {
93. Divo.say("请先选择某个项目");
94. return;
95. }
96. if (ctxNode.isLast()){
97. Divo.say("最后一个项目不能删除");
98. return;
99. }
100. var id = ctxNode.attributes.id;
101. var o;
102. BasisFacade.deleteProject(id, {
103. callback : function(retValue) {
104. o = retValue;
105. },
106. async : false
107. });
108. if (!o.success) {
109. Divo.alert("删除失败(可能已经启用)");
110. return;
111. }
112. root.removeChild(ctxNode);
113. if (ctxNode.lastChild)
114. ctxNode.lastChild.select();
115.
116. ctxNode = null;
117. }
118.
119. // 项目树编辑结束处理
120. function onNodeEdited(o, newText, oldText) {
121. var result;
122. var node = o.editNode;
123. if (adding) {
124. BasisFacade.addProject( {
125. name : newText
126. }, {
127. callback : function(retValue) {
128. result = retValue;
129. },
130. async : false
131. });
132. if (!result.success) {
133. Divo.say("[" + newText + "]保存失败(可能名称重复)。");
134. root.removeChild(node);
135. } else {
136. node.attributes.id = result.newId;
137. }
138. } else {
139. BasisFacade.updateProject( {
140. id : node.attributes.id,
141. name : newText
142. }, {
143. callback : function(retValue) {
144. result = retValue;
145. },
146. async : false
147. });
148. if (!result.success) {
149. node.setText(oldText); //TODO: 不起作用了!
150. Divo.say("[" + newText + "]保存失败(可能名称重复)。");
151. }
152. }
153. editing = false;
154. adding = false;
155. }
156.
157. // 选择项目
158. function onNodeSelected(sm, node) {
159. if (!node)
160. return;
161. if (!editing && !adding) {
162. var project = {
163. id : node.attributes.id,
164. name : node.attributes.text
165. };
166. Divo.publish(Divo.msg.PROJECT_CHANGE, project);
167. } // 会失去焦点
168. }
169.
170. // 创建上下文菜单
171. function createContextMenu() {
172. if (ctx)
173. return;
174.
175. ctx = new Ext.menu.Menu( {
176. id : 'project-ctx',
177. items : [ {
178. text : '新建',
179. icon : Divo.getIconAdd(),
180. scope : this,
181. handler : onAddNode
182. },{
183. text : '修改',
184. icon : Divo.getIconEdit(),
185. scope : this,
186. handler : onUpdateNode
187. }, '-', {
188. text : '删除',
189. icon : Divo.getIconDelete(),
190. scope : this,
191. handler : onDeleteNode
192. }]
193. });
194. ctx.on('hide', onContextHide, this);
195. }
196.
197. // 右击树节点时
198. function onContextShow(node, e) {
199. createContextMenu();
200.
201. if(ctxNode){
202. ctxNode.ui.removeClass('x-node-ctx');
203. }
204. if (node) {
205. ctxNode = node;
206. ctxNode.ui.addClass('x-node-ctx');
207. }
208.
209. ctx.showAt(e.getXY());
210. }
211.
212. // 隐藏上下文菜单时
213. function onContextHide(){
214. if(ctxNode){
215. ctxNode.ui.removeClass('x-node-ctx');
216. ctxNode = null;
217. }
218. }
219.
220. /* ----------------------- public方法 ----------------------- */
221. return {
222. /**
223. * 初始化
224. */
225. init : function() {
226. createTree();
227. createTreeEditor();
228. },
229. /**
230. * 返回树对象
231. */
232. getTree : function() {
233. return tree;
234. }
235.
236. }; // return
237.
238.}();
2. * 项目树
3. */
4.Divo.app.Project = function() {
5. /* ----------------------- private变量 ----------------------- */
6. var treeEl = 'project-tree';
7.
8. var tree, root, treeEditor, root, ctx, ctxNode;
9. var adding, editing;
10. var seed = 0;
11.
12. /* ----------------------- private方法 ----------------------- */
13. // 创建项目树
14. function createTree() {
15. var xt = Ext.tree;
16. tree = new xt.TreePanel( {
17. el : treeEl,
18. animate : true,
19. enableDD : false,
20. containerScroll : true,
21. lines : false,
22. rootVisible : false,
23. root : new Ext.tree.TreeNode()
24. });
25. root = tree.root;
26.
27. var o;
28. BasisFacade.findAllProjects( {
29. callback : function(retValue) {
30. o = retValue;
31. },
32. async : false
33. });
34. if (o) {
35. for (var i = 0;i < o.length; i++) {
36. var n = new xt.TreeNode( {
37. id : o[i].id,
38. text : o[i].name,
39. leaf : true
40. });
41. root.appendChild(n);
42. }
43. }
44.
45. var selModel = tree.getSelectionModel();
46. selModel.on('selectionchange', onNodeSelected, this, true);
47.
48. tree.on('contextmenu', onContextShow, this);
49. // tree.render();
50. // root.expand();
51. }
52.
53. // 创建TreeEditor
54. function createTreeEditor() {
55. var xt = Ext.tree;
56.
57. treeEditor = new xt.TreeEditor(tree, {
58. allowBlank : false,
59. blankText : '请输入项目名称',
60. selectOnFocus : true
61. });
62.
63. treeEditor.on("complete", onNodeEdited, this, true);
64. }
65.
66. // 开始新建项目
67. function onAddNode() {
68. var node = new Ext.tree.TreeNode( {
69. text : '项目' + (++seed),
70. id : 'c1'
71. });
72. adding = true;
73.
74. root.appendChild(node);
75. root.expand();
76. node.select();
77. root.lastChild.ensureVisible();
78. treeEditor.triggerEdit(node);
79. }
80.
81. // 开始修改项目名称
82. function onUpdateNode() {
83. if (!ctxNode) {
84. Divo.say("请先选择某个项目");
85. return;
86. }
87. treeEditor.triggerEdit(ctxNode);
88. }
89.
90. // 删除项目
91. function onDeleteNode() {
92. if (!ctxNode) {
93. Divo.say("请先选择某个项目");
94. return;
95. }
96. if (ctxNode.isLast()){
97. Divo.say("最后一个项目不能删除");
98. return;
99. }
100. var id = ctxNode.attributes.id;
101. var o;
102. BasisFacade.deleteProject(id, {
103. callback : function(retValue) {
104. o = retValue;
105. },
106. async : false
107. });
108. if (!o.success) {
109. Divo.alert("删除失败(可能已经启用)");
110. return;
111. }
112. root.removeChild(ctxNode);
113. if (ctxNode.lastChild)
114. ctxNode.lastChild.select();
115.
116. ctxNode = null;
117. }
118.
119. // 项目树编辑结束处理
120. function onNodeEdited(o, newText, oldText) {
121. var result;
122. var node = o.editNode;
123. if (adding) {
124. BasisFacade.addProject( {
125. name : newText
126. }, {
127. callback : function(retValue) {
128. result = retValue;
129. },
130. async : false
131. });
132. if (!result.success) {
133. Divo.say("[" + newText + "]保存失败(可能名称重复)。");
134. root.removeChild(node);
135. } else {
136. node.attributes.id = result.newId;
137. }
138. } else {
139. BasisFacade.updateProject( {
140. id : node.attributes.id,
141. name : newText
142. }, {
143. callback : function(retValue) {
144. result = retValue;
145. },
146. async : false
147. });
148. if (!result.success) {
149. node.setText(oldText); //TODO: 不起作用了!
150. Divo.say("[" + newText + "]保存失败(可能名称重复)。");
151. }
152. }
153. editing = false;
154. adding = false;
155. }
156.
157. // 选择项目
158. function onNodeSelected(sm, node) {
159. if (!node)
160. return;
161. if (!editing && !adding) {
162. var project = {
163. id : node.attributes.id,
164. name : node.attributes.text
165. };
166. Divo.publish(Divo.msg.PROJECT_CHANGE, project);
167. } // 会失去焦点
168. }
169.
170. // 创建上下文菜单
171. function createContextMenu() {
172. if (ctx)
173. return;
174.
175. ctx = new Ext.menu.Menu( {
176. id : 'project-ctx',
177. items : [ {
178. text : '新建',
179. icon : Divo.getIconAdd(),
180. scope : this,
181. handler : onAddNode
182. },{
183. text : '修改',
184. icon : Divo.getIconEdit(),
185. scope : this,
186. handler : onUpdateNode
187. }, '-', {
188. text : '删除',
189. icon : Divo.getIconDelete(),
190. scope : this,
191. handler : onDeleteNode
192. }]
193. });
194. ctx.on('hide', onContextHide, this);
195. }
196.
197. // 右击树节点时
198. function onContextShow(node, e) {
199. createContextMenu();
200.
201. if(ctxNode){
202. ctxNode.ui.removeClass('x-node-ctx');
203. }
204. if (node) {
205. ctxNode = node;
206. ctxNode.ui.addClass('x-node-ctx');
207. }
208.
209. ctx.showAt(e.getXY());
210. }
211.
212. // 隐藏上下文菜单时
213. function onContextHide(){
214. if(ctxNode){
215. ctxNode.ui.removeClass('x-node-ctx');
216. ctxNode = null;
217. }
218. }
219.
220. /* ----------------------- public方法 ----------------------- */
221. return {
222. /**
223. * 初始化
224. */
225. init : function() {
226. createTree();
227. createTreeEditor();
228. },
229. /**
230. * 返回树对象
231. */
232. getTree : function() {
233. return tree;
234. }
235.
236. }; // return
237.
238.}();
发表评论
-
Ext grid分页
2009-07-14 09:32 2111Ext分页的时候 load(params:{start:0, ... -
Ext store中getTotalCount()与getCount()
2009-05-13 15:39 3329getTotalCount()返回的是所有的总数 getCou ... -
Ext window的大小与屏幕匹配
2009-05-08 10:44 10252网页可见区域宽:document.body.clientWid ... -
editorGrid点击图片删除一行
2009-05-06 15:11 1321捕捉单元格的单击事件,判断单元格是有图片的那一列的.是这一列的 ... -
Ext 组件的doLayout()方法
2009-05-05 19:25 6103当某个组件调用add( Ext.Component/Objec ... -
Ext grid autoExpandColumn
2009-05-05 12:44 6042今天在写grid的时候遇到了个问题 写出来的grid老不出效果 ... -
PropertyGrid不支持store动态绑定的折中解决办法
2009-05-03 19:22 2535官方说PropertyGrid的store属性应该隐去的 在s ... -
Ext.grid.PropertyGrid value 不可修改
2009-05-03 19:14 2379var grid = new Ext.grid.Propert ... -
Ext grid 若干问题
2009-05-03 19:03 15561.grid.getSelectionModel().getC ... -
Ext动态grid
2009-05-03 19:00 2921我们知道,实现extjs的Grid必须先定义一个ColumnM ... -
Ext树节点右键菜单
2009-04-24 10:47 2001用ext做了一个树 // Add Tree Menu tre ... -
Ext 文件上传
2009-04-21 10:38 2408Ext.form.TextField 中设置 inputTyp ... -
Ext树
2009-04-20 17:50 1268Ext.onReady(function(){ var Tre ... -
Ext动态树
2009-04-20 17:16 3009jsp页面代码: <script type=" ... -
扩展grid------RowExpander.js
2009-04-20 16:30 4040首先引入JS:RowExpander.js 这个文件可以在e ... -
Grid增删改
2009-04-20 13:29 1552var store=null; Ext.onReady(fun ... -
Ext遇到的问题--grid表头不能显示
2009-04-03 14:49 1674遇到一个问题,是就grid的表头不能显示,而我的代码写了 { ... -
Ext自动刷新代码
2009-04-03 08:58 2626var e = Ext.get('testRefresh'); ... -
ext总结
2009-03-23 12:56 1196最近也终于使用ext做了一个小的web项目。第一次使用ext做 ...
相关推荐
在描述中提到的"ext带右键菜单的树"是指在ExtJS中实现的一种交互功能,即在树形控件上通过右键点击来显示一个上下文菜单。这种功能极大地提高了用户与应用程序的交互性,使得操作更加直观和便捷。 在ExtJS中,树形...
功能: 1.实现ExtJS tree 节点右键菜单 实现增删查. 2.实现针对实体数据的动态搜索. 3.代码命名规范,简单易懂. 4.支持IE 9,FF 19.0.2. 5.将文件解压至ext包example任意组件文件夹即可浏览效果.
本篇将深入探讨如何在`Ext JS`中实现Tree组件的不同节点拥有不同的右键菜单,这对于提供定制化的用户体验是非常有用的。 `Ext JS`的Tree组件是一个可扩展的树形结构,用于展示层级数据。在默认情况下,Tree的所有...
### 复选框的且带右键菜单的树代码知识点解析 #### 一、概述 本文档介绍了一段实现带有复选框功能以及右键菜单的树形结构代码。该树形结构主要用于展示联系人信息,并支持用户进行一系列操作如搜索、添加、删除等。...
在本案例中,我们看到的关键词"拖拽"和"右键菜单"都是这种树形节点增强功能的典型例子。 首先,"拖拽"功能允许用户通过鼠标将树节点从一个位置移动到另一个位置,这对于需要重新排序或移动数据的场景非常有用。实现...
【标题】"ext+ssh树,带右键功能"指的是在Web应用开发中,结合EXTJS(EXT)和Struts2(SSH)框架构建的一种特殊交互界面,它包含了一个能够展示层级结构数据的树形组件,并且具备了右键菜单功能。EXTJS是一款强大的...
Ext2.0不仅仅实现了复选框的树形菜单,而且使得在选中某个节点时,如果有子节点,那么就能够将所有的字节点全部选中,当然你也可以直接选择你希望的节点。但是,当你第一次选中某个有子节点但是子节点并没有展开的...
你可以设置节点的样式,定义展开/折叠节点的动画,甚至添加右键菜单和拖放功能。 6. **事件监听**: `Ext.tree.Panel`支持各种事件监听,如节点点击、展开、折叠等。通过监听这些事件,可以实现与树的交互逻辑,...
【标题】"ext-tree.rar_ext...综上所述,这个压缩包提供了一个使用Ext JS创建具有右键菜单功能的树形视图的实例,该视图可以直接操作数据库,对于学习和理解如何在Web应用中集成交互式树形组件和数据库操作非常有价值。
例如,添加节点可以监听`contextmenu`事件,然后在右键菜单上添加“添加”选项: ```javascript treeView.on('itemcontextmenu', function(view, record, item, index, event) { event.preventDefault(); var ...
本例子采用ext3.0+java开发的树结构,完全的动态管理,树结构一旦形成,支持右键菜单,进行增删改,增加,就在树当前节点下创建一个新的节点,利用ajax同步到数据库,总之类似于资源管理器的增删改,由于本人是初学...
5. **事件处理**:EXT-js提供了丰富的事件机制,如`itemclick`、`itemcontextmenu`等,你可以根据需要绑定事件处理器,实现点击目录时打开、右键菜单时的上下文操作等。 6. **自定义图标**:通过设置TreeNode的`...
使用这个扩展,你可以快速地为树节点添加功能丰富的右键菜单,而无需过多关注底层实现。 在实际应用中,ExtRightMenuTree可能还包括其他高级特性,如权限控制(决定哪些用户可以执行特定操作)、异步加载(仅在需要...
它支持多种操作,如点击节点、拖拽节点、右键菜单等,且提供了丰富的API和回调函数,便于开发者进行扩展和定制。ZTree 2.6版本相比早期版本,优化了性能,增加了更多功能,例如支持多选、半选、自定义图标等,使得树...
- 在实际应用中,可能还需要实现节点的展开/折叠、拖放操作、右键菜单、节点点击事件等功能。EXTJS提供了丰富的API和事件处理机制来支持这些高级特性。 6. **示例代码**: - 实例代码会包含创建TreePanel,配置...
8. **扩展和插件**:EXT Tree有丰富的扩展和插件,如`checkbox`(复选框节点)、`contextmenu`(右键菜单)等,可以进一步增强功能。 在文档`extjs的tree的使用.doc`中,你将找到关于如何设置这些配置、创建树实例...
同时,用户可以通过点击、拖拽、右键菜单等方式与树进行交互。例如,可以监听`click`、`expand`、`collapse`等事件来进行相应的操作。 6. **扩展性**:ExtJS的树形控件具有高度的可扩展性,可以通过插件(plugins)...
9.6. JsonView实现用户卡片拖拽与右键菜单 9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.2...