简析 deferRowRender

本文探讨了使用ExtJS Grid时遇到的问题:在新版中设置选中第一行记录后,界面未能立即高亮显示该行。文章分析了问题的原因,并提供了修改deferRowRender属性以解决此问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在用 extjs Grid 静态载入数据 时  , 我一般 默认初始要选中第一行,即

 

grid.render(this.div);
grid.getSelectionModel().selectFirstRow();

 


  但 2.2 如果不注意的话可能会出现的情况:事实上 grid.getSelection 已经得到第一行的数据,而 界面上第一行却没有高亮,初看源代码发现并没有什么问题,但是经测试

 

grid.render(this.div);
alert(1);
grid.getSelectionModel().selectFirstRow();

 

发现 alert 时浏览器尚未显示 grid 的界面,这也就解释了, 在我设置选择后,界面并没有渲染出来导致


原因: 原来 grid 新版增加了一个 deferRowRender ,默认为 true ,则这样的话 ,当调用 render,render 调用 afterrender,由于 grid 采用 m,v 分离模式,grid 选择模型已经搞好了,而

 

 if(this.deferRowRender){
            this.view.afterRender.defer(10, this.view);
        }else{
            this.view.afterRender();
        }

 

设置了 deferRowRender ,则界面的渲染还要等一会,然而我在调用 render 后立刻调用 select,虽然 select 设置了 0行 的css,不过马上新的渲染开始,冲掉了原先的设置,故逻辑上对了,而表现不对,但为什么新版要这样做呢,说是为了效率,可能先让 grid 的框架出来(表头,边框),然后再慢慢渲染以行行的数据,可能用户看着舒服点,不过好像view没有  提供渲染成功的事件 。


我只好手动设置 deferowrender=false 现在表现一致了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值