- 浏览: 67493 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
zhengyong7232:
请问 myscret.key 怎么产生的啊?
java AES加密 -
ld3838029:
可以下载,非常感谢
ext-3.3.1下载地址 -
liancl:
非常感谢,可以下载
ext-3.3.1下载地址 -
liuxh3:
thank you very much! 可以下载
ext-3.3.1下载地址 -
timeflowing:
...
jquery验证输入非数字(无法输入数字)
文章内不再提供示例,需要查看者请从SVN下载,地址:
http://exttools.googlecode.com/svn/trunk/
效果图:
示例js:
http://exttools.googlecode.com/svn/trunk/
效果图:
Js代码
- /**
- * 扩展了Panel类,其布局设为accordion,所在区域为west;该组件初始化后会根据配置的url和root向后台发
- * 起请求并解析返回的json串,根据parentcode为空的结点生成TreePanel,子节点通过parentcode属性添加为
- * 对应结点的子节点,注意此处每个节点的code必须小于父节点并接大于下方的其它结点;
- *
- * 1.1更新:
- * 1.不再需要leaf属性,程序内部判断;
- * 2.store用完后即销毁,不再可用;
- * 3.修改了结点点击的触发事件,仅注册一次以减少内存占用,该方法传递给监听函数一个Ext.tree.TreeNode对象,
- * 可通过node.attributes属性获取结点属性;
- * 4.添加了一个findNodeById方法,该方法通过id字符串返回对应Ext.tree.TreeNode对象;
- *
- * @author chemzqm@gmail.com
- * @version 1.1
- * @since 2010-5-9
- *
- */
- Ext.namespace("QM.ui");
- QM.ui.AccordinTreePanel = Ext.extend(Ext.Panel, {
- /**
- * @cfg(url) 发送请求的地址
- */
- /**
- * @cfg(root) json数组的根字符串
- */
- margins: '5 0 5 5',
- split: true,
- width: 210,
- initComponent: function(){
- Ext.apply(this, {
- layout: 'accordion',
- region: 'west'
- })
- QM.ui.AccordinTreePanel.superclass.initComponent.call(this);
- this.addEvents( /**
- * @event itemclick 树结点被点击时触发 参数:node 当前结点对象,record 当前结点对应record对象
- */
- 'click', /**
- * @event afterload 菜单项加载完毕后触发
- */
- 'afterload');
- if (!this.store) {
- this.store = new Ext.data.JsonStore({
- url: this.url,
- root: this.root,
- fields: ['code', 'name', 'parentcode', 'iconCls', 'href']
- });
- }
- this.store.load({
- callback: this.loadTrees,
- scope: this
- });
- },
- loadTrees: function(records, o, s){
- var pnodes,trees = [],tree;
- this.store.sort('code');
- for (var i = 0; i < records.length; i++) {
- var record = records[i];
- if (!record.get('parentcode')) {
- tree = this.creatTreeConfig(record);
- trees.push(tree);
- pnodes = [];
- pnodes.push(tree.root);
- }
- else {
- var next_record = records[i + 1];
- var isLeaf = !next_record || next_record.get('parentcode') != record.get('code');
- this.addTreeNode(pnodes, record, isLeaf);
- }
- }
- Ext.each(trees,function(tree){
- this.add(tree);
- },this);
- this.fireEvent('afterload', this);
- this.mon(this.el, 'click', this.onClick, this);
- this.doLayout();
- this.store.destroy();
- },
- findNodeById:function(id){
- var node,trees = this.findByType('treepanel',true);
- Ext.each(trees,function(tree){
- node = tree.getNodeById(id);
- return !node;//找到的话返回false
- });
- return node;
- },
- onClick: function(e, t, o){
- if(Ext.fly(t).hasClass('x-tree-ec-icon')){//点击伸展按钮时无视
- return;
- }
- var el,id,node;
- if (el = e.getTarget('.x-tree-node-el', 3,true)) {
- e.stopEvent();
- id = el.getAttributeNS('ext','tree-node-id');
- node = this.findNodeById(id);
- this.fireEvent('click',node);
- }
- },
- creatTreeConfig: function(record){
- var config = {
- xtype: 'treepanel',
- autoScroll: true,
- rootVisible: false,
- title: record.get('name'),
- iconCls: record.get('iconCls'),
- root: {
- nodeType: 'async',
- expanded: true,
- id: record.get('code'),
- children: []
- }
- };
- return config;
- },
- addTreeNode: function(pnodes, record, isLeaf){
- var len = pnodes.length;
- for (var i = len - 1; i >= 0; i--) {
- if (pnodes[i].id != record.get('parentcode')) {
- pnodes.pop();
- }
- else {
- var parent = pnodes[i].children;
- var node = {
- text: record.get('name'),
- id: record.get('code'),
- iconCls: record.get('iconCls'),
- href: record.get('href'),
- leaf: isLeaf
- };
- if (!isLeaf) {
- node.children = [];
- pnodes.push(node);
- }
- parent.push(node);
- return;
- }
- }
- }
- });
- Ext.reg('accTree', QM.ui.AccordinTreePanel);
/** * 扩展了Panel类,其布局设为accordion,所在区域为west;该组件初始化后会根据配置的url和root向后台发 * 起请求并解析返回的json串,根据parentcode为空的结点生成TreePanel,子节点通过parentcode属性添加为 * 对应结点的子节点,注意此处每个节点的code必须小于父节点并接大于下方的其它结点; * * 1.1更新: * 1.不再需要leaf属性,程序内部判断; * 2.store用完后即销毁,不再可用; * 3.修改了结点点击的触发事件,仅注册一次以减少内存占用,该方法传递给监听函数一个Ext.tree.TreeNode对象, * 可通过node.attributes属性获取结点属性; * 4.添加了一个findNodeById方法,该方法通过id字符串返回对应Ext.tree.TreeNode对象; * * @author chemzqm@gmail.com * @version 1.1 * @since 2010-5-9 * */ Ext.namespace("QM.ui"); QM.ui.AccordinTreePanel = Ext.extend(Ext.Panel, { /** * @cfg(url) 发送请求的地址 */ /** * @cfg(root) json数组的根字符串 */ margins: '5 0 5 5', split: true, width: 210, initComponent: function(){ Ext.apply(this, { layout: 'accordion', region: 'west' }) QM.ui.AccordinTreePanel.superclass.initComponent.call(this); this.addEvents( /** * @event itemclick 树结点被点击时触发 参数:node 当前结点对象,record 当前结点对应record对象 */ 'click', /** * @event afterload 菜单项加载完毕后触发 */ 'afterload'); if (!this.store) { this.store = new Ext.data.JsonStore({ url: this.url, root: this.root, fields: ['code', 'name', 'parentcode', 'iconCls', 'href'] }); } this.store.load({ callback: this.loadTrees, scope: this }); }, loadTrees: function(records, o, s){ var pnodes,trees = [],tree; this.store.sort('code'); for (var i = 0; i < records.length; i++) { var record = records[i]; if (!record.get('parentcode')) { tree = this.creatTreeConfig(record); trees.push(tree); pnodes = []; pnodes.push(tree.root); } else { var next_record = records[i + 1]; var isLeaf = !next_record || next_record.get('parentcode') != record.get('code'); this.addTreeNode(pnodes, record, isLeaf); } } Ext.each(trees,function(tree){ this.add(tree); },this); this.fireEvent('afterload', this); this.mon(this.el, 'click', this.onClick, this); this.doLayout(); this.store.destroy(); }, findNodeById:function(id){ var node,trees = this.findByType('treepanel',true); Ext.each(trees,function(tree){ node = tree.getNodeById(id); return !node;//找到的话返回false }); return node; }, onClick: function(e, t, o){ if(Ext.fly(t).hasClass('x-tree-ec-icon')){//点击伸展按钮时无视 return; } var el,id,node; if (el = e.getTarget('.x-tree-node-el', 3,true)) { e.stopEvent(); id = el.getAttributeNS('ext','tree-node-id'); node = this.findNodeById(id); this.fireEvent('click',node); } }, creatTreeConfig: function(record){ var config = { xtype: 'treepanel', autoScroll: true, rootVisible: false, title: record.get('name'), iconCls: record.get('iconCls'), root: { nodeType: 'async', expanded: true, id: record.get('code'), children: [] } }; return config; }, addTreeNode: function(pnodes, record, isLeaf){ var len = pnodes.length; for (var i = len - 1; i >= 0; i--) { if (pnodes[i].id != record.get('parentcode')) { pnodes.pop(); } else { var parent = pnodes[i].children; var node = { text: record.get('name'), id: record.get('code'), iconCls: record.get('iconCls'), href: record.get('href'), leaf: isLeaf }; if (!isLeaf) { node.children = []; pnodes.push(node); } parent.push(node); return; } } } }); Ext.reg('accTree', QM.ui.AccordinTreePanel);
示例js:
Js代码
- new Ext.Viewport({
- layout: 'border',
- items: [{
- xtype: 'accTree',
- title : '菜单',
- root : 'menus',//必须要配
- url: 'menu.json',//必须要配
- listeners:{
- 'click':function(node){
- alert(node.attributes.href);
- }
- }
- }, {
- region: 'center',
- html: 'center'
- }]
- });
- });
发表评论
-
通用ajax
2011-11-01 11:21 761var xmlHttpReq; ... -
struts + jquery判断下载是否结束
2011-03-31 17:34 1134思路是这样的,下载事件触发两个提交一个action 一个是计算 ... -
Extjs 中ComboBox的使用
2011-02-16 19:44 1093function add(){ ... -
struts hibernate extjs 增删改查(初级练习)
2011-01-30 17:19 1538Ext.onReady(function (){ // va ... -
ext-3.3.1下载地址
2011-01-26 15:19 2267ext下载比较麻烦 需要邮件验证 这里直接贴个地址得了 h ... -
ext form入门的练习
2011-01-21 20:48 860Ext.onReady(function(){ var f ... -
extgrid的使用
2011-01-21 18:52 761js文件部分 Ext.onReady(function(){ ... -
ext中tree以及viewport的使用方法
2011-01-20 19:39 1660Ext.onReady(function(){ var ... -
extjs panel练习
2011-01-19 19:13 906Ext.onReady(function(){ var p ... -
extjs使用第一步导入相关文件以及顺序
2011-01-18 16:08 987<link rel="stylesheet& ...
相关推荐
在本文中,我们将探讨如何使用layui框架动态渲染生成左侧3级菜单,特别是在后端返回数据的情况下。layui是一款轻量级的前端UI框架,提供了一系列丰富的组件,包括表格、表单、按钮、弹窗等,同时也支持自定义的扩展...
- **动态生成**:描述中提到的“后台获取数据填充动态生成”,意味着前端通过AJAX或者Fetch API向后端请求数据,然后根据返回的数据动态渲染导航菜单。这种方式使得菜单可以根据用户权限或其它条件动态变化。 **2....
在后台,我们需要执行SQL查询,从`menus`表中获取所有菜单数据,并根据`parent_id`组织成树形结构。可以使用递归方法或者DFS(深度优先搜索)/BFS(广度优先搜索)算法来构建树。 3. 数据传递: 将构建好的树形...
本文将以“自己写的左侧四级导航菜单”为主题,深入探讨使用js、asp.net及C#实现这一功能的方法。 首先,四级导航菜单通常用于组织复杂的信息架构,它可以清晰地展示网站或应用程序的层级结构,让用户能够通过四层...
SDMenu是一款专为后台管理系统设计的可折叠/展开的左侧导航菜单。在Web开发中,尤其是在构建管理界面时,一个良好的导航菜单对于提升用户体验至关重要。SDMenu提供了这种功能,允许用户根据需要收起或展开菜单项,...
Swagger接口文档改良添加左侧菜单是针对API开发过程中的一个重要优化,旨在提高开发人员对API文档的使用效率。Swagger是一款流行的RESTful API文档工具,它能够自动生成、描述、测试和发现Web服务接口。通过在...
Ruoyi 是一个基于 Vue.js 的企业级后台管理框架,它的菜单通常是通过 JSON 数据动态生成的。在 `src/config/menu.js` 文件中,你可以找到菜单的配置数据。这里你需要根据需求调整菜单的层级和对应关系。 1. **一级...
在IT行业中,尤其是在Web开发领域,左侧树形菜单导航是一种常见的设计模式,它主要用于网站或应用的后台管理系统,帮助用户高效地浏览和操作各种功能模块。这种导航方式以树状结构展示,通常由js(JavaScript)实现...
【天猫左侧导航菜单分类列表】是一个常见的网页设计元素,尤其在电商网站中广泛使用,用于组织和展示商品的各类目,方便用户快速找到所需商品。这个项目涉及到的主要知识点包括前端开发语言HTML、CSS以及JavaScript...
layui提供了多种布局方式,其中一种是左右两栏布局,适用于左侧展示导航菜单,右侧展示内容。这种布局可以通过layui的内置CSS类和JavaScript API来实现。 3. 左侧菜单: layui提供了一套完善的菜单系统,可以方便...
它可以是侧边栏菜单、顶部导航菜单等形式,常见于各种管理后台、CMS(内容管理系统)等应用场景。 2. **图标添加**: - **UI库集成**:许多现代前端框架如Element UI、Ant Design等提供了丰富的图标库,通过引入...
通过`addClass()`、`removeClass()`和`toggleClass()`等方法,可以轻松地实现导航菜单的高亮和选中状态。 菜单导航则是对系统功能的逻辑分类,通常包括如用户管理、权限设置、数据统计等模块。在jQuery中,我们可以...
在这个特定的项目中,"nodejs做的一个树形菜单框架和数据库文件"是一个利用Node.js构建的系统,它实现了树形菜单结构,这种结构常用于Web应用程序的左侧导航栏,以组织和展示多级的菜单项。用户可以通过点击这些菜单...
在网页设计中,导航菜单是用户与网站交互的重要部分,而侧边下拉菜单更是常见且实用的设计元素。本篇文章将详细探讨如何利用jQuery实现一个无限极的侧边下拉菜单,以及其在后台框架中的应用。 首先,我们要理解...
本知识点详细介绍了如何使用layui框架通过Ajax请求动态生成左侧三级菜单。 Layui是一款基于jQuery的前端UI框架,以简单、轻量和模块化著称,广泛用于构建Web界面。 ### 知识点一:引入layui相关模块 在实现自定义...
"左右框架模式"通常指的是左侧为菜单栏,右侧显示具体内容的布局方式,这是一种常见的后台界面设计模式,方便用户快速定位和操作。 【web系统后台】标签表明这个框架专注于构建基于Web的应用程序,通常包括但不限于...
开发者可以通过配置JSON数据源来动态生成树形结构,方便用户导航和访问不同级别的管理模块。 2. **AJAX+xml操作**:利用ASP.NET的AjaxControlToolkit或jQuery AJAX库,以及XML数据格式,实现异步数据传输和更新。这...