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