zoukankan      html  css  js  c++  java
  • 记录我的不足一个周【当做故事看,我经常就是在圆子里找故事看的!】

    本周巨痛感冒中,基本上没有任何药可以医治,只有我自身产生更强的抗体。。。

     

    Jquery 控件使用:

    老板要求用一个Jquery控件,将树形将组织结构(具体不能说,签了保密协议滴。。。)信息显示出来,而且要延迟加载(当节点被展开时,才从后台查询数据),还要有CheckBox的标准功能(即,选中子节点,必须影响父节点的选中状态;选中父节点点,能够应用到所有子节点),虽然阅读过Jquery的一些书籍,但是,本人很负责地说,ca ,从来没有用过。。。属于半理论主义者!

     

    在网上找到一组ztree的控件,由于是第一次,不知从何下手,于是决定将这个使用的过程记录下来,相信将这个过程“重构”的话,肯定有收获!!!

     

    一.找资料跳过,开工前准备

    阅读ztree Demo,了解ztree 中大致有什么样的功能。并熟悉基本信息的配置(附:多说两句,熟悉基本信息配置,主要指API基础信息配置,比如ztree中的var setting;每一种Jquery TreeView都可能有自己的API结构,使用的方式不同,一句话,就是知道怎么用)。

     

    二.具体过程

    找到自己需要的功能,将Demo上的代码拷贝,确保能够模仿成功。

    功能1)CheckBox:这个还算顺利,基本上设置一下就搞定。

     

    功能2)而分批异步加载大数据量(即延迟加载)就悲剧了(主要因为比新手还新手)。

     

    问题:怎样传递请求到后台,async: {

                                         enable: true,

                                         url: “some.php”

                                }

    Demo中给出的是php,我用asp.net不会,差点疯了

    后来一个同事告诉我用“一般处理程序”;果然这样可以解决

     

    功能3)接着在Handler(一般处理程序)中写了一大堆的后台代码,主要是写树形结构的查询,本来是不难写的,但数据库文档基本为0,所以费了好大时间才知道需要什么样的字段。这里用了N多时间。

     

    总结这个过程:基本上这是一个“白老鼠”的工作过程,浪费了太多时间。根本原因是对JS不熟悉,这个应当总结。当然,学会了JS的调试,debugger关键字;学会了使用handler接受ajax请求处理

     

    理想化过程:1获取Jquery控件资料,包括Demo,API,源码  ==》  2查看Demo,寻找自己所需要的功能集合,确保能够出现  ==》 3通过Demo 中的页面源码并结合API将所有需求功能组合在一起 ==》 4提供后台数据 ==》 5一个个地测试功能。

     

    耗时异常处理(指处理得不好,将浪费时间)

    1不能浪费时间查看过多的API细节,坚信一句话,很多知识是在“运行时”学到的,如果不用的话,很难理解透彻的,至少我是这样的;

    2查看全部Demo的源码浪费时间,不能追求全部,只有能够达到目标即可,因为很多东西看起来不够完美,但是却能正常工作working well

    3组合时要对照API描述,这里不提倡一个功能一个功能地测试,因为往往组装(集成)还有后续的测试,当然要做好注释,这样确保一眼能够看清属于哪个功能,不然很可能会运行页面Nn次。。。我就是这样干的,人才啊;

    4如果有现成的后台数据,则不用写;如果没有,最好思维转移,将后台数据处理代码写得尽量好,不能随便写点来测试,不然,悲剧的是,将一遍一遍“重写”后台代码,我还是这样干的。。。;

    5 用JS断点+debugger测试,这样确保能够按照自己的期望运行,这里没有新的体会。

     

    思想体会:我国的大学中,我没有学到Lambda演算,函数式编程,这次用Jquery,体会到了,Lambda如此强大,类似的,匿名方法+委托,Linq中都有变种,或者是实现。

    以上过程用了2天(自己加班),新手嘛,加班属于自己的兴趣。

     

    第三天主要实现一个功能:查询当前部分下的所有人员信息,包括子部门的人员信息。即需要递归地查询。

    前两天的劳累,第三天有点懒散了,做事也比较慢。

    由于查询时通过WCF远程操作,而有没有对应的数据库文档,悲剧啊。。。就对应客户端协定(Contract)函数看,一个个地找,试图找到类似GetAllPersonInDeptAndSubDept()的签名,眼睛都快吊出来了,结果只看到一个 GetPersonsInDept(),没办法了,递归吧,写好递归函数之后,出现了两个牛逼的错误。。。

    1. 传入DataTable 保存每一个人员的信息,我大致是这样操作的,

    Foreach(DataRow item in ds.Table[0])

    {

               dtRet.Rows.Add(item);

    }

    死活提示“。。。已属于另一个表”,ca,网上一搜,才知道,需要用ImportDataRow方法,不能用Add。(解释一下,前提是我想在一个空的DataTable中插入相同列的DataRow,而不用初始化DataTable列结构,如果初始化了DataTable的列结构,是可以用Add的)

    在结合百度知道的代码,  DataTable  dt=  datarows[0].Table.Clone();  for { dt.ImportDataRow(datarows[i]); }才搞定。于是,开始思考微软是否做得不够好(YY一下!)  一句话,先获取DataRow的表架构(Table Schema)信息,然后一条条导入ImportDatRow

     

      2.这个错误,我好想哭,但是明白了之后,又很火,最后觉得自己傻。

    调用递归获取人员信息函数GetPersonInDepts(nodeId)之后,一直在等待,最后爆了。。。栈溢出,一次运行大概2分钟,很漫长的一个过程,同行肯定了解2分钟是一个超级长的时间,我果断不用单步调试

    (当年做ZOJ 1002还是1004,我对着递归函数调试了50次出栈,最后没看懂,后来花了很多时间明白了递归的原理,以后凡是遇到递归函数,绝对不调试),

    采用看数据,然后一条条数据出现的时候,我哭了,如:

    查询编号为001 的第一条数据居然是本身001,这是死递归(由于采用的是前序遍历方式)啊。。。。。。这谁设计的,这谁公开的协定,真的好火。。。然后加一个if就AC了。

     

    总结:

    1.如果程序逻辑正确,却出现了知识领域中莫名的异常,最好在网上找到答案,并稍作记录;

    2.如果先看一下数据,就不会产生如此多的 StackOverFlow,所以,写程序,不只是要求能够写好代码,得出结构,而这其中的写程序的流程策略也是非常重要的

     

     

    第四天,以为又要加班了,但是比较轻松,就写了一份文档,不,是改了一份文档。

    但是还是认真地做了,Joel(《软件随想录》的作者)说了,写作能力很重要,一个好的程序员更需要好的沟通能力与写作能力。

     

    由于星期五还没到来,明天再写。

    Thursday, August 16, 2012

  • 相关阅读:
    台州 OJ 3847 Mowing the Lawn 线性DP 单调队列
    洛谷 OJ P1417 烹调方案 01背包
    快速幂取模
    台州 OJ 2649 More is better 并查集
    UVa 1640
    UVa 11971
    UVa 10900
    UVa 11346
    UVa 10288
    UVa 1639
  • 原文地址:https://www.cnblogs.com/pengzhen/p/FirstWorkingWeek.html
Copyright © 2011-2022 走看看