简析 deferRowRender

  在用 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 现在表现一致了。

你可能感兴趣的:(Ajax,框架,css,Flash,idea)