DWZ使用笔记

DWZ使用笔记

一、前言

在近期的一个项目中,引入了DWZ这个富client框架,算是一次尝试吧。期间也遇到不少问题,总算一一攻克了。特以此文记之。
本人用的是dwz-ria-1.4.5+Asp.net webform,写这篇笔记时最新版本号已经是1.4.6了。DWZ官方网址

二、文件夹结构

dwz-ria-1.4.5.zip解压后,文件夹结构见下图2.1。
当中js:dwz的核心脚本代码;
themes:css样式,提供了default、azure、green、purple、silver等皮肤;
uploadify:文件上传控件。
图2.1

三、JS说明

3.1,dwz.core.js:dwz的基石。用的比較多的是String的扩展方法,ajaxError(ajax error时的默认处理)、ajaxDone(ajax success时的默认处理)。
client接收到的asp.net webmethod返回值,多了层d。dwz中ajax方法接受的返回值是{statusCode:xx,message:'xxxx'}这种格式,在后台webmethod返回这种格式,前台js接收到的{d:{statusCode:xx,message:'xxxx'}}。
obj2str、jsonEval是dwz提供的序列化/反序列化json的函数,在使用中发现存在bug,建议使用json2.js的。
3.2,dwz.ajax.js:dwz提供的ajax函数。有分页处理(navTabAjaxDone、dialogPageBreak)、ajax success时的回调函数(navTabAjaxDone、dialogAjaxDone)。
navTab、dialog是两种页面显示方式,navTab:以标签页显示的画面,dialog:弹出式的画面。
3.3,dwz.ui.js:画面的初始化处理。function initUI(_box)就是对一系列的dwz标签进行初始化,第三方控件的初始化也要放在这里。Jquery的ready事件运行后,才会运行initUI,我在项目中用了editable-select、treetable两个控件,一開始是放在ready事件里初始化的,碰巧他们的class和dwz的重名,调试时怎么也出不来那个效果,后来看调试代码才发现不能写在ready里。
3.4,dwz.barDrag.js:左边活动面板的隐藏、显示
3.5,dwz.stable.js、dwz.cssTable.js:dwz提供的两种表格。相应的标签各自是class='table'/class='list'。
csstable仅仅支持排序;
stable功能多些,支持排序,列幅的调整等。它实际上是把原先的一个表格变成了2个,一个是包括列标题的表格,一个就仅仅有数据行的表格,拖动列标题时,会对应调整还有一个表格的列宽。使用过程中发现生成的表格,主要是数据行的那个没有id/name了,没法往里面动态加入数据了,所以改动了下源码。
从显示效果看,csstable行与行之间没有细线分隔,stable的就有。对照两者的css,在 \themes\css\core.css文件,
/* CSS Table */
table.list td 这行添加border-bottom: solid 1px #ededed;
设置td底部边框的线型、宽度、颜色。
不足的地方:stable动态生成了表头列(表格),在右側加入了纵向滚动栏,所以会调整html中设置好的列宽。遇到多行表头、空数据行(新增画面,初始时没有数据行,执行时加入数据)这种场景,表头列和数据列会错位。这时改用csstable或改动stable源码(我是改用csstable了)。
3.6,dwz.dialog.js:弹出画面用的。$.pdialog.getCurrent():获取当前的弹出画面
3.7,dwz.navTab.js:标签页画面用的。navTab.getCurrentPanel():获取当前的标签页对象

四、UI布局

通常在login.aspx页面登录后,进入index.aspx(dwz-ria-1.4.5.zip中的index.html)页面,这个是主页面,项目中要引用的js,css文件都是在这里载入。
页面布局:
div id="header"。页面的标题部分
div id="leftside"
主菜单部分
div id="container" 
主体部分,多标签页形式显示                             
div id="footer"。页脚部分
navTab/dialog页面的html代码,不是像寻常那样写成<html><head/><body/></html>这种格式,
而是像下图所看到的的格式那样。
 
以下说下项目中使用的几种典型界面
4.1,查询画面
<h2 class="contentTitle">xxxx列表</h2>
<cc1:PagingForm ID="pagerForm" runat="server" ActionUrl="xxx" />
<div class="pageHeader">
    <form id="Form1" onsubmit="return navTabSearch(this);" action="xxxx" method="post" runat="server">
    <div class="searchBar">
        <table class="searchContent">
            <tr>
                <td>
                    编号:<input type="text" name="xxxx" value="xxxx" />
                </td>
                <td>
                    名称:<input type="text" name="xxxxx" value="xxxx"/>
                </td>
            </tr>
        </table>
        <div class="subBar">
            <ul>
                <li><div class="buttonActive"><div class="buttonContent"><button type="submit">检索</button></div></div></li>
            </ul>
        </div>
    </div>
    </form>
</div>
<div class="pageContent">
    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
    <HeaderTemplate>
        <table class="table" width="100%" layoutH="208">
        <thead>
            <tr>
                <th width="40">序号</th>
                <th width="120">编号</th>
                <th width="150">名称</th>
                <th width="80">操作</th>
            </tr>
        </thead>
        <tbody>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><asp:Literal runat="server" ID="lblRownumber" /> </td>
            <td><%#NvStr(Eval("Code"))%> </td>
            <td><%#NvStr(Eval("Name"))%> </td>
            <td><asp:Literal runat="server" ID="lbtCommand" />
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </tbody>
        </table>
    </FooterTemplate>
    </asp:Repeater>
    <cc1:PagingFoot runat="server" ID="pagingFoot"/>
</div>
4.2,单表的新增/编辑画面
代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="xxxx.aspx.cs" Inherits="xxxx" %>
<div class="pageContent">
<form method="post" id="xxxx" class="pageForm required-validate"
οnsubmit="return validateCallback(this, navTabAjaxDone);">

<div class="pageFormContent" layoutH="56">

<p>
<label>名称:</label>
<input name="name" class="required" type="text" size="30" />
</p>

<p>
<label>总计:</label>
<input name="total" type="text" size="30" class="required number" />
</p>
</div>
<div class="formBar">
<ul>
<li class="continue">
<input type="checkbox" checked="checked" class="checked" id="continue"/>继续加入
</li>
<li><div class="buttonActive">
<div class="buttonContent">
<button type="button" name="btnSave" onclick="">加入</button>
</div>
</div></li>
<li>
<div class="button">
<div class="buttonContent">
<button type="button" class="close">关闭</button>
</div>
</div>
</li>
</ul>
</div>
<script type="text/javascript">

$().ready(function () {
xxxx.initDetailFormData(null);
});
</script>
</form>
<iframe class="T_iframe"></iframe>
</div>
a,<button type="button" class="close">,dwz会为class=close的加入一个关闭页面的动作。
b,<iframe class="T_iframe">,这个是为了解决IE6,select框覆盖弹出层的bug,參照了“IE6 select遮挡div问题”这篇文章
 
4.3,主子表的新增/编辑画面
 
<h2 class="contentTitle">xx填报</h2>
<div class="pageContent">
    <div class="panel" defH="200">
        <h1>基本信息</h1>
        <div class="pageFormContent">
            <p>
                <label>编号:</label>
                <input name="" readonly="readonly" type="text" size="30" />
            </p>
            <p>
                <label>名称:</label>
                <input name="" class="required" type="text" size="30" style="ime-mode:active;" />
            </p>
            <p>
                <label>项目负责人:</label>
                <input name="" type="text" size="30" style="ime-mode:active;" />
            </p>
        </div>
    </div>
 
    <div class="divider"></div>
 
    <div class="panelBar">
        <ul class="toolBar">
            <li><a class="button" onclick=""><span>加入</span></a></li>
        </ul>
    </div>
    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
    <HeaderTemplate>
        <table class="table" width="100%" layoutH="385" id="xxxx" nowrapTD="false">
        <thead>
            <tr>
                <th width="200">名称</th>
                <th width="150">型号规格</th>
                <th width="100">数量</th>
                <th width="120">单位价格(元)</th>
                <th width="150">总计(元)</th>
                <th width="100">操作</th>
            </tr>
        </thead>
        <tbody>
    </HeaderTemplate>
    <ItemTemplate>
        <tr class = "unitBox" data-tt-id="" data-tt-parent-id="" ondblclick="">
            <td>xxx</td>
            <td>xxx</td>
            <td>xxx</td>
            <td>xxx</td>
            <td>xxx</td>
            <td>xxx</td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </tbody>
        </table>
    </FooterTemplate>
    </asp:Repeater>
    <div class="formBar">
        <ul>           
            <li>
                <div class="buttonActive">
                    <div class="buttonContent"><button type="button" onclick="">保存</button>
                    </div>
                </div>
            </li>
        </ul>
    </div>
</div>
 
a,主表的输入项最外层套了个<div class="panel" defH="200">,早先是没写这个,就<div class="pageFormContent">(这个和子表的<table>平级,如今是<div class="panel" defH="200">和<table>平级)。那样写,当pageFormContent里有select控件时,在IE6下显示位置会错乱,后来加上这个panel就好了。
b,<tr class = "unitBox" data-tt-id="" data-tt-parent-id="">这个写法是用到了TreeTable这个Jquery控件。
 
 
4.4,主子表+多标签页的新增/编辑画面
与前一节的差别是,我用多标签页的形式显示子表的数据。
 
<h2 class="contentTitle">xxxx填报</h2>
 
<div class="pageContent">
 
    <div class="panel" defH="220">
        <h1>基本信息</h1>
        <div class="pageFormContent">
            <p>
                <label>编号:</label>
                <input name="" readonly="readonly" type="text" size="30" />
            </p>
 
            <p>
                <label>名称:</label>
                <input name="" class="required" type="text" size="30" style="ime-mode:active;" />
            </p>
            <p>
                <label>负责人:</label>
                <input name="" type="text" size="30" style="ime-mode:active;" />
            </p>
        </div>
    </div>
 
    <div class="divider"></div>
 
    <div class="tabs" currentIndex="0" eventType="click">
 
        <div class="tabsHeader">
            <div class="tabsHeaderContent">
                <ul>
                    <li><a id="" href="javascript:;"><span>客户列表</span></a></li>
                    <li><a id="" href="x1.aspx" class="j-ajax"><span>材料列表</span></a></li>
                    <li><a id="" href="x2.aspx" class="j-ajax"><span>xx列表</span></a></li>
                    <li><a id="" href="x3.aspx" class="j-ajax"><span>xx列表</span></a></li>
                    <li><a id="" href="x4.aspx" class="j-ajax"><span>xx列表</span></a></li>
                    <li><a id="" href="x5.aspx" class="j-ajax"><span>xx列表</span></a></li>
                    <li><a id="" href="x6.aspx" class="j-ajax"><span>xx列表</span></a></li>
                </ul>
            </div>
        </div>
 
        <div class="tabsContent" layoutH="420">
            <div>
                <div class="panelBar">
                    <ul class="toolBar">
                        <li><a class="button" onclick=""><span>加入</span></a></li>
                    </ul>
                </div>
                <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
                <HeaderTemplate>
                    <table class="list" width="100%" layoutH="420" id="tbAllocatedUnits" nowrapTD="false">
                    <thead>
                        <tr>
                            <th width="200">客户名称</th>
                            <th width="120">xxxx</th>
                            <th width="200">xxxx</th>
                            <th width="120">操作</th>
                        </tr>
                    </thead>
                    <tbody>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr ondblclick="">
                        <td>xxx</td>
                        <td>xxx</td>
                        <td>xxx</td>
                        <td>xxx</td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </tbody>
                    </table>
                </FooterTemplate>
                </asp:Repeater>
            </div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
 
        <div class="tabsFooter">
            <div class="tabsFooterContent"></div>
        </div>
    </div>
 
 
    <div class="formBar">
        <ul>
            <li><div class="buttonActive">
                    <div class="buttonContent"><button type="button" onclick="ScienceBudget.saveBudget();">保存</button>
                    </div>
                </div>
            </li>
        </ul>
    </div>
</div>
a,<div class="tabsHeaderContent">内的标签数目要和<div class="tabsContent">里的子div个数一致。一个标题相应<div class="tabsContent">里的一个div。
b, <div class="tabs" currentIndex="0" eventType="click">中currentIndex指定了初始显示第一个标签页的内容。
c,其它标签页的标题都是这样写的<a id="" href="x1.aspx" class="j-ajax">,用ajax方式载入href页面的html,
所以在<div class="tabsContent">里,除了第一个子div里写了内容,其它几个子div都是空的(<div></div>),
点击这个标签页后才会载入页面。
这篇就先写到这里了。
原文地址:http://www.cnblogs.com/wordmy/p/3219760.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?

最近&#xff0c;无论是读者群&#xff0c;还是公众号后台&#xff0c;很多人都比较关注以下几个问题&#xff1a;阿里的简历是半年只能投递一次吗&#xff1f;阿里的面试可以多个部门同时进行吗&#xff1f;面试没过&#xff0c;又被系统捞起来了&#xff0c;我该怎么办&#…

记一次蚂蚁金服面试被虐经历

本文来自作者投稿&#xff0c;原作者&#xff1a;yes面试前的小姐姐来说说前不久蚂蚁金服一面的情况。说来也是巧合&#xff0c;当时在群里有位蚂蚁金服的小姐姐发了个内推&#xff0c;看了下JD感觉可以试试于是就私聊了小姐姐发简历内推了。我16年也就是大三上就开始实习了&am…

用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧

2019独角兽企业重金招聘Python工程师标准>>> 寻觅工具 确定任务之后第一步就是找个趁手的库来干活。 Python Excel上列出了xlrd、xlwt、xlutils这几个包&#xff0c;但是 它们都比较老&#xff0c;xlwt甚至不支持07版以后的excel它们的文档不太友好&#xff0c;都可…

Spring Boot 2.3.3 正式发布!

Spring Boot 2.3.3 稳定版已发布&#xff0c;可从 repo.spring.io 和 Maven Central 获取。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</versio…

木板最优切割利润最大_最多进行K笔交易的股票最大买卖利润

木板最优切割利润最大This is a very popular interview problem to find maximum profit in stock buying and selling with at most K transactions. This problem has been featured in the interview rounds of Amazon. 这是一个非常受欢迎的面试问题&#xff0c;目的是在最…

[数据库]Oracle和mysql中的分页总结

Mysql中的分页物理分页•在sql查询时&#xff0c;从数据库只检索分页需要的数据•通常不同的数据库有着不同的物理分页语句•mysql物理分页&#xff0c;采用limit关键字•例如&#xff1a;检索11-20条 select * from user limit 10,10 ;* 每次只查询10条记录.当点击下一页的时候…

List 集合去重的 3 种方法

问题由来在实际开发的时候&#xff0c;我们经常会碰到这么一个困难&#xff1a;一个集合容器里面有很多重复的对象&#xff0c;里面的对象没有主键&#xff0c;但是根据业务的需求&#xff0c;实际上我们需要根据条件筛选出没有重复的对象。比较暴力的方法&#xff0c;就是根据…

C语言入门——排序

排序的方法有很多种比较常见的便为&#xff1a;冒泡排序、选择排序、插入排序、快速排序。 今天我们就围绕着四种排序来说&#xff0c;如果有兴趣的话可以去查找一下其他排序。 在排序这方面我们主要讨论&#xff1a; 稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&…

【转】eclipse技巧1

2019独角兽企业重金招聘Python工程师标准>>> 俗话说的好啊&#xff0c;“工于利启事&#xff0c;必先善其器”&#xff0c;如果说你的编程功底是一个枪法的话&#xff0c;那么强大的eclipse就是android战士们最好的武器。 这里&#xff0c;我们来总结eclipse的使用技…

定时任务最简单的3种实现方法(超好用)

这是我的第 86 篇原创文章作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;定时任务在实际的开发中特别常见&#xff0c;比如电商平台 30 分钟后自动取消未支付的订单&#x…

C语言入门基础——Brute-Force算法

Brute-Force算法的基本思想是&#xff1a; 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较&#xff0c;若相等&#xff0c;则继续逐个比较后续字符&#xff0c;否则从串s 的第二个字符起再重新和串t进行比较。 2) 依此类推&#xff0c;直至串t 中的每个字符依次和…

为什么劝你放弃Maven?看看Gradle的这些优点就知道了

相信使用Java的同学都用过Maven&#xff0c;这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven&#xff0c;可能会发现Maven有一些地方用的让人不太舒服&#xff1a;Maven的配置文件是XML格式的&#xff0c;假如你的项目依赖的包比较多&#xff0c;那么XML文件就会…

css中的换行符_如何使用CSS防止项目列表中的换行符?

css中的换行符Introduction: 介绍&#xff1a; Dealing with various items in CSS sometimes pose very different problems. The problem could be anything, it could be related to positioning, arrangement, and whatnot, therefore all such kinds of problems require…

Java中的一些坑,汇总篇(2万字)

Photo Drew Farwell 文 | 常意1.前言

6款html5模板下载

http://www.100sucai.com/code/1316.htmlhttp://www.100sucai.com/code/1318.htmlhttp://www.100sucai.com/code/1310.htmlhttp://www.100sucai.com/code/1309.htmlhttp://www.100sucai.com/code/1303.htmlhttp://www.100sucai.com/code/1301.html转载于:https://blog.51cto.co…

高并发系统 3 大利器之缓存

引言随着互联网的高速发展&#xff0c;市面上也出现了越来越多的网站和app。我们判断一个软件是否好用&#xff0c;用户体验就是一个重要的衡量标准。比如说我们经常用的微信&#xff0c;打开一个页面要十几秒&#xff0c;发个语音要几分钟对方才能收到。相信这样的软件大家肯定…

QTimer与事件循环理解

问题分析 最近在使用QT的时候发现了某些问题&#xff0c;查阅资料最后总结一下。我起初是想用QT在界面还在加载时加载一副动画&#xff0c;然后动画下面有加载的滚动条代表时间&#xff0c;由于测试所以界面加载没写很多东西很快就加载完成了。我就想让他加载慢点我看看效果。…

MYSQL 数学运算符问题

背景&#xff1a; 在mysql中 ’stringA stringB 这种类型的操作&#xff0c;在mysql内部会自动转化为两个double 数进行运算。 -------------------------------------------------------------------------------------------------------------------------------- 例子&a…

面试系列第1篇:常见面试题和面试套路有哪些?

作者 | 面哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;面试是人生中为数不多的改变自身命运的途径之一&#xff0c;当然有效的准备面试也是人生中为数不多的低投入高回报的…

漫话:应用程序被拖慢?罪魁祸首竟然是Log4j!

之前一段时间&#xff0c;为我们发现的一个SaaS应用程序会间歇性地卡顿、变慢&#xff0c;因为很长时间都没有定位到原因&#xff0c;所以解决的办法就只能是重启。这个现象和之前我们遇到的程序变得卡顿不太一样&#xff0c;因为我们发现这个应用程序不仅在高流量期间时会变慢…