DWZ并没有提供Layout布局组件 但是提供了良好的插件集成机制,这里花了点时间继承了一个第三方UI的布局组件即LigerUI Layout
文章最后会提供 SVN版代码 大家可以比较看如何集成的LigerUI Layout
详细:
1.1 添加JS库文件和CSS文件引用
在 index.html中:
<!-- ligerUI CSS 样式 --> <link href="ligerUI/skins/Aqua/css/ligerui-layout.css" rel="stylesheet" type="text/css" media="screen"/> <!-- ligerUI 布局组件--> <script src="ligerUI/js/core/base.js" type="text/javascript"></script> <script src="ligerUI/js/plugins/ligerLayout.js" type="text/javascript"></script>
1.2 初始化layout、扩展、兼容修改
Dwz.ui.js 负责DWZ框架的初始化,具体就是遍历window中所有html元素
将需要的Html元素与DWZ(或者第三方框架)的JS效果进行绑定
PS:集成步骤:
A:ligerUI跟随DWZ加载
B:对两个框架进行兼容性修改
具体如下:
A:将ligerUI的 layout组件跟随DWZ初始化
目的:
具体就是将标记了class="ligerui_layout"的div 与 layout 组件的JS效果进行绑定
找到dwz的dwz.ui.js 在最后:
添加:
// 这里放其他第三方jQuery插件... //集成ligerUI layout 开始 集成代码参考的是dwz.ui.js 150行~239行 $(".ligerui_layout", $p).each(function(){ var $layout = $(this); /*注意 ligerUI layout 接受json参数后 不会进行类型转换 所以 int boolean必须自行转换*/ var opts = {}; if ($layout.attr("topHeight")) opts.topHeight = parseInt($layout.attr("topHeight")); if ($layout.attr("bottomHeight")) opts.bottomHeight = parseInt($layout.attr("bottomHeight")); if ($layout.attr("leftWidth")) opts.leftWidth = parseInt($layout.attr("leftWidth")); if ($layout.attr("centerWidth")) opts.centerWidth = parseInt($layout.attr("centerWidth")); if ($layout.attr("rightWidth")) opts.rightWidth = parseInt($layout.attr("rightWidth")); if ($layout.attr("InWindow")) opts.InWindow = Boolean($layout.attr("InWindow")); if ($layout.attr("heightDiff")) opts.heightDiff = parseInt($layout.attr("heightDiff")); if ($layout.attr("height")) opts.height = parseInt($layout.attr("height")); if ($layout.attr("isLeftCollapse")) opts.isLeftCollapse = Boolean($layout.attr("isLeftCollapse")); if ($layout.attr("isRightCollapse")) opts.isRightCollapse = Boolean($layout.attr("isRightCollapse")); if ($layout.attr("allowLeftCollapse")) opts.allowLeftCollapse = Boolean($layout.attr("allowLeftCollapse")); if ($layout.attr("allowRightCollapse")) opts.allowRightCollapse = Boolean($layout.attr("allowRightCollapse")); if ($layout.attr("allowLeftResize")) opts.allowLeftResize = Boolean($layout.attr("allowLeftResize")); if ($layout.attr("allowRightResize")) opts.allowRightResize = Boolean($layout.attr("allowRightResize")); if ($layout.attr("allowTopResize")) opts.allowTopResize = Boolean($layout.attr("allowTopResize")); if ($layout.attr("allowBottomResize")) opts.allowBottomResize = Boolean($layout.attr("allowBottomResize")); if ($layout.attr("space")) opts.space = parseInt($layout.attr("space")); if ($layout.attr("minLeftWidth")) opts.minLeftWidth = parseInt($layout.attr("minLeftWidth")); if ($layout.attr("minRightWidth")) opts.minRightWidth = parseInt($layout.attr("minRightWidth")); var $g = $layout.ligerLayout(opts); //利用Jquery 将该对象缓存到该html元素 以后如果在任何地方想操作该对象 //作用:可以随时调用该对象的方法 eg:根据页面变化需要resize一下 可以循环取出 //所有该对象 全部进行resize $layout.data("layoutObj",$g); //更改west部分的超链接为手动加载center ,使得layout center中的元素可以控制 west and east的关闭 //即:west部分的超链接 使用dwz手动局部刷新的办法 $("#xxxId").loadUrl(url,data, callback); //eg: // 手动超链接:<li><a href="demo/pagination/list_fool.html" target="layoutAjax" rel="fool_center" tname="name" tvalue="value" checked="true">第一级菜单项 ABC</a> // 按钮: <a href="javascript:void(0);" target="layoutControl" rel="rightCollapse" option="false" class="icon" ><span>打开右侧</span></a> //动态加载的center中 添加一个打开右侧的按钮 // PS:如下代码参考原型是dwz.ui.js 240行~253行 $("a[target=layoutAjax]", $layout).each(function(){ $(this).click(function(event){ var $this = $(this); var rel = $this.attr("rel"); if (rel) { var $rel = $("#"+rel); $rel.loadUrl($this.attr("href"), {}, function(){ $rel.find("[layoutH]").layoutH();//重新调整高度 $(window).trigger(DWZ.eventType.resizeGrid);//重新调整宽度 $rel.find("a[target=layoutControl]").each(function(){ var $openbtn = $(this); $openbtn.bind("click",function(event){ $g.setRightCollapse(false); event.preventDefault();//绑定 click的时候一定要在最后执行这一句否则会打开新页面 设置了 javascript:void(0);也不管用 }); }); }); } event.preventDefault(); }); }); }); //集成ligerUI Layout 结束
B: 添加需要的页面
一 、主菜单的超链接
<li><a href="ligerUI_layout1.html" target="navTab" rel="ligerUI_layout1" title="layout布局">集成ligerUI的Layout布局组件</a></li>
二、在上一步结果页中应用layout
<style type="text/css"> /*west标题位置垂直居中失效 这里修补一下*/ .l-layout-left .l-layout-header-inner { line-height: 24px; } .l-layout-right .l-layout-header-inner { line-height: 24px; } </style> <div class="ligerui_layout" leftWidth="200" heightDiff="-36" isRightCollapse="true"> <div id="test_west" position="left" title="组织机构" layoutH="29"> <ul class="tree treeFolder collapse" > <!-- <li><a href="demo/pagination/list_fool.html" target="ajax" rel="fool_center" tname="name" tvalue="value" checked="true">第一级菜单项 ABC</a> --> <li><a href="demo/pagination/list_fool.html" target="layoutAjax" [此处与dwz.ui.js中对应]rel="fool_center" tname="name" tvalue="value" checked="true">第一级菜单项 ABC</a> <ul> <li><a href="#" target="navTab" rel="dialog1" tname="name" tvalue="value" checked="true">第二级菜单项 A </a></li> <li><a href="#">第二级菜单项 B </a></li> <li><a href="#">第二级菜单项 C </a> <ul> <li><a href="#">第三级菜单项 A </a></li> <li><a href="#">第三级菜单项 B </a></li> </ul> </li> </ul> </li> <li><a href="#">第一级菜单项 B</a></li> </ul> </div> <div id="fool_center" position="center" title="标题"> <h1 style="margin:200px;">组织部门管理</h1> </div> <div position="right" title="右侧"></div> </div>
PS:
heightDiff 计算方法:
使用火狐查看 如果高度超出X像素 那么 添加 heightDiff="-X" 属性 反之同理
<!--[if !supportLists]-->三、<!--[endif]-->上一步layout center中 ajax异步加载的主数据页面示例
部分代码:
<div class="panelBar">
......
<li><a class="icon" href="javascript:void(0);"
target="layoutControl"
rel="rightCollapse"
option="false" [此处与dwz.ui.js中对应]><
span>打开右侧</span></a></li>
</ul>
</div>
C:兼容性问题
原因 :
<!--[if !supportLists]-->1. <!--[endif]-->dwz resize 与 ligerUI layout resize不同步导致
<!--[if !supportLists]-->2. <!--[endif]-->dwz与layout的resize都没有考虑到对方dom结构 resize仅仅考虑上层div的宽度或高度 然后重新计算自己的高与宽,两个插件集成以后dom 嵌套耦合在一起所以各自的resize方法都失效
详细问题 :dwz左侧菜单隐藏或再次打开时 右侧container内容区域的 宽度问题
上图是:左侧主菜单关闭后container最右侧出现大片空白
上图是:鼠标向右拖动左侧主菜单扩大主菜单宽度时 container右侧的 主数据区域没有自适应
问题分析:
左侧主菜单关闭与打开的JS控制代码是dwz.barDrag.js它在关闭与打开的时候调用了dwz的resize
左侧主菜单拖动扩大或缩小的JS控制代码也在这个文件中:
这里 $(window).trigger(DWZ.eventType.resizeGrid);//DWZ.eventType.resizeGrid 类似Java枚举在dwz.core.js中定义
意思是触发 window中注册的一个名为 resizeGrid的function。
最后通过全文查找该function定义在dwz.stable.js中,并绑定给window:
解决办法:
同理我们也向window注册一个ligerui layout resize函数 ,参考dwz的resize代码 这个function 应该循环所有的class=”ligerui_layout"” div对应的 layout布局对象 然后
调用形如 this.reize();的方法
通过分析 ligerui 的LigerLayout.js 发现布局对象一有变动(某个方向的div打开或关闭时)均会调用 _onResize() ,那么注册LigerUI Layout的resize方法如下:
一、定义Layout resize的对外访问函数
(目的是以便随时调用它来将所有Layout重新布局,这里是模仿DWZ :定义function后想window绑定)
在dwz初始化的时候 初始化ligerUI 后进行绑定
所以找到Dwz.ui.js
定义:
function _resizeLigerLayout(){ //重新布局dwz的table".ligerui_layout" $(".ligerui_layout").each(function(){ var $this = $(this); $this.data[这里取出的是Jquery缓存中的 与改div 对应的layout对象,缓存是在插件集成的时候添加的]("layoutObj")._onResize(); }); //重新布局ligerUI的 layout }
绑定:
function initEnv() { ....... setTimeout(function(){ initLayout(); initUI(); // navTab styles var jTabsPH = $("div.tabsPageHeader"); jTabsPH.find(".tabsLeft").hoverClass("tabsLeftHover"); jTabsPH.find(".tabsRight").hoverClass("tabsRightHover"); jTabsPH.find(".tabsMore").hoverClass("tabsMoreHover"); //ligerUI layout $(window).unbind("resizeLigerLayout").bind("resizeLigerLayout", [在此进行layout resize绑定]_resizeLigerLayout); }, 10); .................
二、按顺序调用dwz 、ligerUi-layout 的resize
现在我们可以随时调用这两个组件的resize方法进行重新布局,因为dwz出现问题的地方就是container中主数据区域的宽度,这个主数据区域的直接上级div是ligerUI的Layout
由此 resize的顺序是 先 ligerUI的Layout 进行重新布局 然后的dwz在布局好的上层div中重新布局(也就是调整主数据区域的宽度)
现在的问题就是按顺序调用这两个方法了:
需要调用的地方:
Dwz中:
dwz.barDrag.js
<!--[if !supportLists]-->1.<!--[endif]-->左侧主菜单打开时
2.左侧主菜单关闭时
3.左侧主菜单拖动改变左侧主菜单宽度时
LigerUI-Layout中:
LigerLayout.js
_onResize: function ()
{
.....
//liger layout 重新调整布局后 要调用dwz重新调整 (即调整container中主内容区域的宽度)
$(window).trigger(DWZ.eventType.resizeGrid);
}
另:SVN版本代码
后记:no zuo no die 国内的UI框架走了一遍最终还是选择EXT ,因为公司项目环境下EXT是最叫人省心省 力的 ,不过对于研究JS DWZ还是比较好的临摹素材 一个月多月 白白浪费 不说了都是泪
相关推荐
结合Bootstrap的栅格系统和样式,`dwz_jui`能够帮助开发者创建符合现代网页标准的布局和界面。 在`1.6.1`版本中,可能包含以下关键更新: 1. **性能优化**:通过对代码进行重构和优化,提高了框架的运行速度,降低...
在实际应用中,DWZ-JUI 的**页面布局**功能非常强大,它提供了一系列预设的页面模板和布局方式,可以快速创建多列、响应式布局。同时,框架还支持动态加载和切换页面,实现了类似桌面应用的用户体验。 总的来说,...
DWZ(Design What You Want)是一款基于jQuery的国产富客户端框架,主要针对Web应用的界面设计和交互体验,被称作“jUI”。这个框架旨在简化网页开发过程,提供了一系列组件和工具,使得开发者能够快速构建功能丰富...
2. **Ajax集成**:DWZ_jui深入集成了Ajax技术,使得页面局部更新和异步交互变得更加简单,减少了用户等待时间,提升了应用的响应速度。通过AJAX,开发者可以轻松实现无刷新页面操作,提升用户体验。 3. **数据网格*...
【标题】"dwzteam-dwz_jui-master" 是一个开源项目,主要涉及的是DWZ UI框架的一个版本。DWZ UI(Dynamic Web Zone User Interface)是一个基于jQuery的前端交互框架,专为Web应用程序设计,提供了丰富的组件和交互...
DWZ文档中还详细记录了一些常见的问题及其解决办法,例如如何在DWZ中集成第三方jQuery插件、解决兼容性问题等,这些都是开发者在实际应用过程中可能会遇到的问题,通过查阅文档可以获得相应的解决方案。 综上所述,...
1. **页面结构**:理解DWZ_JUI的页面布局模式,如`<div class="container">`和`<div class="ui-layout">`等。 2. **控制器与动作**:掌握DWZ的URL映射规则,如何设置控制器和动作,实现页面跳转。 3. **AJAX操作**:...
这里的`ueditor`是JUI提供的富文本编辑器类型,它可能包括像UEditor这样的第三方编辑器。 3. **配置选项** JUI富文本框架允许你自定义编辑器的行为和外观。例如,你可以设定初始值、工具栏按钮、图片上传等参数。...
标题中的“dwz欢迎页的...总的来说,这个知识点涉及到了前端开发中的页面布局、`iframe`使用、第三方服务集成以及Web应用框架的定制化。通过掌握这些技能,开发者可以为用户创建更加丰富和个性化的Web应用欢迎页面。
"dwzteam_dwz_jui_maste"是一个与前端开发相关的项目,主要涉及DWZ团队的DWZ UI框架。DWZ UI是一个广泛使用的JavaScript和CSS框架,专为构建响应式和交互式的Web应用程序而设计。这个项目的名称暗示了它是DWZ UI的一...
- `lib`:可能包含第三方库,如jQuery、Bootstrap等。 - `demo`或`examples`:示例代码和演示,帮助开发者理解如何使用框架。 - `docs`或`手册`:框架的文档资料,介绍使用方法和API。 - `build`或`dist`:编译后的...
- **Word集成**:可能通过在线转换技术,让Web应用能够预览或编辑Word文档,但具体实现需结合第三方服务或插件。 - **CHM帮助文件**:CHM是Windows平台的编译型HTML帮助文件,DWZ JUI能内嵌CHM文件,提供离线帮助...
DWZ RIA 1.4.4 (20121016 修正了横向导航js报错问题) 修复使用xheditor插件IE下兼容问题:IE下打开一个含有编辑器的页面,然后关闭,再打开不能录入问题 修复多文件上传插件uploadify 的html扩展方式,java读取不...
"dwzteam-dwz_jui-master.zip" 是一个压缩包文件,主要包含了一个名为 "dwz_jui" 的项目或库。从标题和描述来看,这个项目可能与DWZ JUI有关,DWZ全称为“Design Within ZIndex”,是一个基于jQuery UI的前端开发...
J-HI(Java Web)快速开发平台 + jUI整合应用(Eclipse插件生成项目代码) ThinkPHP2.1 + jUI整合应用 YII + jUI整合应用 常见问题及解决: Error loading XML document: dwz.frag.xml 直接用IE打开index.html弹出一个...
MVC3是ASP.NET MVC系列的第三个主要版本,它引入了许多新特性,如 Razor视图引擎、增强的模型绑定、对jQuery的内置支持以及更强大的错误处理机制。 当DWZ框架与ASP.NET MVC3结合使用时,可以实现前后端分离的开发...
DWZ团队推出的"dwz_jui-master_java_"版本,是针对Java开发者优化的一个分支,将DWZ与Java后端紧密集成,提供了一套完整的前后端解决方案。 **1. DWZ框架核心特性** - **响应式布局**:DWZ框架支持多设备和多屏幕...
1. **页面布局**:DWZ提供了多种预设的页面布局模式,如流式布局、栅格系统等,便于开发者快速构建页面结构。 2. **UI组件**:框架内集成了丰富的UI组件,如按钮、表格、表单、弹窗、提示、树形菜单、下拉选择器等...
**分页插件详解——以jui_pagination为例** 在网页设计和开发中,分页功能是一种常见的用户界面元素,尤其在处理大量数据时,如博客、电商网站的产品列表或者论坛的帖子列表。分页能够有效地将长内容分成多个部分,...