jQuery MiniUI

 找回密码
 立即注册
查看: 7903|回复: 10
打印 上一主题 下一主题

提个建议,关于datagrid 的虚拟滚动 [复制链接]

Rank: 2

跳转到指定楼层
楼主
发表于 2013-4-9 03:02:50 |只看该作者 |倒序浏览
本帖最后由 3078825 于 2013-4-9 03:07 编辑

当启动虚拟滚动的时候,右边的滚动条根据返回的数据total来决定滚动条长度,
在拖动滚动条放开后,进行json请求数据,传递pageIndex pageSize 来获取新数据进行补充

可以定义最初从第一页显示还是最初最后一页来显示。

实际上就是分页pagebar改成滚动条来控制分页。

这样,虚拟滚动的功能才能够最大化。
否则虚拟滚动只是个渲染不渲染表格的功能而已。


还有, un还是不能用。

能举个详细的例子吗?

<div style="width:800px;">
        <div class="mini-toolbar" style="border-bottom:0;padding:0px;">
            <table style="width:100%;">
                <tr>
                    <td style="width:100%;">
                        <a class="mini-button" iconCls="icon-add" plain="true">加载</a>
                    </td>
                </tr>
            </table>           
        </div>
    </div>
    <div id="datagrid1" class="mini-datagrid" style="width:800px;height:280px;" idField="id"
        allowResize="true" pageSize="20"
        allowCellEdit="true" allowCellSelect="true" multiSelect="true"
        editNextOnEnterKey="true"
    >
        <div property="columns">
            <div type="checkcolumn"></div>
            <div field="loginname" allowResize="false" width="120" headerAlign="center" allowSort="true">员工帐号
                <input property="editor" class="mini-textbox" style="width:100%;" />
            </div>
            <div field="age" width="100" allowSort="true" >年龄
                <input property="editor" class="mini-spinner" minValue="0" maxValue="200" value="25" style="width:100%;"/>
            </div>            
            <div field="birthday" width="100" allowSort="true" dateFormat="yyyy-MM-dd">出生日期
                <input property="editor" class="mini-datepicker" style="width:100%;"/>
            </div>   
            <div field="remarks" width="120" headerAlign="center" allowSort="true">备注
                <input property="editor" class="mini-textarea" style="width:100%;" minHeight="50"/>
            </div>
            <!--ComboBox:本地数据-->         
            <div type="comboboxcolumn" autoShowPopup="true" name="gender" field="gender" width="100" allowSort="true"  align="center" headerAlign="center">性别
                <input property="editor" class="mini-combobox" style="width:100%;" data="Genders" />               
            </div>                              
            <!--ComboBox:远程数据-->
            <div type="comboboxcolumn" field="country" width="100" headerAlign="center" >国家
                <input property="editor" class="mini-combobox" style="width:100%;" url="../data/countrys.txt" />               
            </div>   
            <div type="checkboxcolumn" field="married" trueValue="1" falseValue="0" width="60" headerAlign="center">婚否</div>
        </div>
    </div>

js:
function loading()
{
      var datagrid = mini.get('datagrid1');
      datagrid.set({url:'../data/AjaxService.aspx?method=SearchEmployees'});
      datagrid.load();
      datagrid.on('drawcell',function(e){
            alert('test');
            var record = e.record,column = e.column;
            if (column.field == "loginname") {
                   e.cellHtml = "会员:"+e.row.loginname;
            }
      });
      datagrid.un('drawcell');//这里不能unbind掉这个drawcell,导致重复调用drawcell里面的代码
      datagrid.un('drawcell',null);//尝试过无效
      datagrid.un('drawcell',function(e){});//尝试过无效
      datagrid.un('drawcell',function(e){
            alert('test');
            var record = e.record,column = e.column;
            if (column.field == "loginname") {
                   e.cellHtml = "会员:"+e.row.loginname;
            }
      });//亦尝试过无效
}

Rank: 8Rank: 8

沙发
发表于 2013-4-9 10:17:56 |只看该作者
1.http://www.miniui.com/BigTest/10000-datagrid.html
这个其实就是根据滚动条的位置,充当分页,来加载数据的

2.function click(){...}

button.on("click",click);
button.un("click",click);

Rank: 2

板凳
发表于 2013-4-9 13:57:26 |只看该作者
factory 发表于 2013-4-9 10:17
1.http://www.miniui.com/BigTest/10000-datagrid.html
这个其实就是根据滚动条的位置,充当分页,来加载数 ...

试过无效,你看我帖子的代码有问题吗?
注释处都换过,没办法取消

虚拟滚动我好像没看到有提交pageSize.不知是否是代码没搞对

Rank: 8Rank: 8

地板
发表于 2013-4-9 14:22:08 |只看该作者
3078825 发表于 2013-4-9 13:57
试过无效,你看我帖子的代码有问题吗?
注释处都换过,没办法取消

你绑定的时候这样写
grid.on("drawcell", XXX);
然后解除这样解除grid.un("drawcell", XXX);

function XXX(e) {
   ......
}

Rank: 2

5#
发表于 2013-4-9 14:32:31 |只看该作者
factory 发表于 2013-4-9 14:22
你绑定的时候这样写
grid.on("drawcell", XXX);
然后解除这样解除grid.un("drawcell", XXX);

明白你意思了,写函数名,而不是写个函数方法。

我看来是习惯jquery的方式了

Rank: 2

6#
发表于 2013-4-9 14:33:03 |只看该作者
factory 发表于 2013-4-9 14:22
你绑定的时候这样写
grid.on("drawcell", XXX);
然后解除这样解除grid.un("drawcell", XXX);

但虚拟滚动我好像也调不通。没看到拖动滚动条的时候有提交数据

Rank: 8Rank: 8

7#
发表于 2013-4-9 16:47:25 |只看该作者
3078825 发表于 2013-4-9 14:33
但虚拟滚动我好像也调不通。没看到拖动滚动条的时候有提交数据

官网的demo是本地生成的,静态的,所以你用工具看不到跟后台的交互

Rank: 2

8#
发表于 2013-4-10 17:18:03 |只看该作者
factory 发表于 2013-4-9 16:47
官网的demo是本地生成的,静态的,所以你用工具看不到跟后台的交互

能写个例子吗?
官网的的确是js循环生成的,
那如果不是这样的话,该怎么去弄?我试了,
json返回total给他,他并不会有任何变化。

Rank: 8Rank: 8

9#
发表于 2013-4-11 09:27:30 |只看该作者
3078825 发表于 2013-4-10 17:18
能写个例子吗?
官网的的确是js循环生成的,
那如果不是这样的话,该怎么去弄?我试了,

我们现在的virtualScroll只针对静态的数据,
你服务端的话,还是用分页来做吧

Rank: 2

10#
发表于 2013-4-11 17:52:04 |只看该作者
factory 发表于 2013-4-11 09:27
我们现在的virtualScroll只针对静态的数据,
你服务端的话,还是用分页来做吧 ...

那实际上我一楼说的是没法实现的吧?


我是做成聊天对话框的形式的。
如果我一次性读取数据过多的话,对服务器来说压力还是很大的
所以我想做成一开始读取最后的几条聊天内容,滚动到最后一条,他往上拖动的时候,动态加载聊天内容显示出来。
但如果虚拟滚动是针对静态数据的,那我只能哭了
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Archiver|普加软件

GMT+8, 2024-11-27 21:03 , Processed in 1.060450 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部