• dhtmxgrid使用中的一些问题


    (摘)

    最近在用dhtmlx画界面,遇到不少郁闷的问题。中文资料少得出奇。。。
    在线文档也不够详细。还好他们有个论坛,而且论坛的搜索功能做得还行。

    1. grid
    header中的#master_checkbox,会自动生成一个全选/全不选的checkbox,
    本来是个很方便的功能,但是却有一个致命问题:
    gird在current_page为第一页的时候,翻到第二页,这时两页的数据全部缓存在客户端了,点击#master_checkbox之后,这两页的checkbox全部被选中了。。。。。。
    Master checkbox will affect only rows which is already loaded to the client side.

    我只想选中当前页面的checkbox哇。

    只好去改源代码 ext/dhtmlxgrid_filter.js:
    原来的代码是这样的

    dhtmlXGridObject.prototype._in_header_master_checkbox = function(t, i, c) {
    t.innerHTML = c[0] + "<input type='checkbox' />" + c[1];
    var self = this;
    t.firstChild.onclick = function(e) {
    self._build_m_order();
    var j = self._m_order ? self._m_order[i] : i;
    var val = this.checked ? 1 : 0;
    self.forEachRow(function(id) {
    var c = this.cells(id, j);
    if (c.isCheckbox())
    c.setValue(val)
    });
    (e || event).cancelBubble = true
    }
    };

    forEachRow()也是会遍历到所有本地缓存的row。

    改成这样的:

    dhtmlXGridObject.prototype._in_header_master_checkbox = function(t, i, c) {
    t.innerHTML = c[0] + "<input type='checkbox' />" + c[1];
    var self = this;
    t.firstChild.onclick = function(e) {
    self._build_m_order();
    var j = self._m_order ? self._m_order[i] : i;
    var val = this.checked ? 1 : 0;
    /**
    * huarong@masalife.com 2010 11 27
    * to check/uncheck checkboxes only in the current page.
    self.forEachRow(function(id) {
    var c = this.cells(id, j);
    if (c.isCheckbox())
    c.setValue(val)
    });
    **/

    var state=self.getStateOfView();
    for (var k=state[1]; k<state[2]; k++){
    var c=self.cellById(self.getRowId(k),j);
    if (c.isCheckbox()) c.setValue(val);
    }
    /**
    * end..
    */

     
    (e || event).cancelBubble = true
    }
    };

    2 还是关于#master_checkbox的问题。
    比如在当前页做了全选,然后翻页,再翻回来,会发现checkbox仍然是选中状态。
    应该在翻页的时候,清除所有checkbox的选中状态,master_checkbox的选中状态也要被清除。

    mygrid.attachEvent("onBeforePageChanged", clearCheckedRows);
     
    /**
    * 翻页时
    * 清除checkbox的选中状态
    * 清除master_checkbox的选中状态
    *
    * @return true. 如果返回false会导致翻页的动作没有进行。
    */

     
    function clearCheckedRows()
    {
     
    mygrid.checkAll(false);
     
    $("#mygrid_container").find("input").each(function(index){
    if ($(this).attr("type") == "checkbox")
    {
    if ($(this).attr("checked"))
    $(this).attr("checked", false);
    }
    });
    return true;
    }

    注意这个函数一定要返回true,否则就没办法翻页了。

    3. dhtmlx的window,挺好用的。
    突然发现window里面的页不执行js……
    原来attachURL有二种调用方式:
    attachURL(url, true);
    这种是ajax方式,窗口中的页面不执行js。

    attachURL(url);
    这种是iframe方式,可以执行js………

    4. combobox怎样做readonly

    combo_zone1 = new dhtmlXCombo("combo_zone1", "alfa1", 90);
    combo_zone1.readonly(1);
     
    而且不能再使用enableFilteringMode(true);

    5. 这次是关于JQuery的
    The :input selector basically selects all form controls: input, textarea, select and button elements

    6. combobox filter的时候,调用的url是怎样的?

    combo_zone1.enableFilteringMode(true,'./combo.php', true);
    //实际的URL为:combo.php?pos=0&mask=a&a_dhx_rSeed=1290654577000
    //mask就是关键词。

    7. grid不使用dynamic paging或者smart rendering的时候,
    会把所有的数据都加载到客户端,翻页操作完全在本地,不与服务器交互。

    如果要dynamic分页,比如每次只返回5页数据给grid,
    grid会在翻页动作时,自动附加二个参数: posStart 与 count,
    在sql里面可以直接当作 LIMIT posStart, count 来用。

    这样的话,grid怎样才能知道总的页数呢?

    在返回的xml中,
    rows行里面额外加上了二个参数:

    <rows total_count="4000" pos="1000">
    ......
    </rows>

    total_count是总记录数,
    pos就是posStart
    ……然后grid会拿4000除以pagesize,就得出总页数了。。。
    这里再提一下,如果采用分页的toolbar皮肤,它会显示一个下拉框,
    里面是下拉形式的第一页,第二页。。。第N页。
    如果你的GRID一共有10000页。。。这个下拉框就会有10000个下拉的选项。。
    我当时测试的GRID50万页,结果IE狂吃内存啊,单核CPU 100%,查了好久才发现是它的问题。
    只能在dhtmlx grid的源码中把这个下拉框去掉!!!

    8 grid setColAlign()无效。。。
    所有的字段都是左对齐的。

    查看了一下代码,发现dhtmlx生成出的代码是:

    <TD title=649 valign=middle align=right _cellIndex="2" _clearCell="false" _title="true">649</TD>

    这段代码没什么问题。。。
    问题在于我的css中,写了一个

    TD
    {
    padding: 0px;
    border: 0px;
    text-align: left;
     
    }
  • 相关阅读:
    hihocoder1238 Total Highway Distance(树形dp)
    POJ2104 K-th Number(主席树)
    ansible安装使用入门
    TIDB资料收集
    elasticssearch+kibanna入门(撰写中)
    fabric-sdk-java在IDEA中的使用
    安装hyperledger fabric V1.0.1
    fabric读书笔记
    fabric默认样例的分析
    在eclipse中安装go编辑器阅读fabric代码
  • 原文地址:https://www.cnblogs.com/Byrd/p/1970520.html
Copyright © 2020-2023  润新知