Ext2.0代码跟踪:GridPanel只有一行记录时,字段修改也触发select事件
背景:
界面有两个GridPanel,分别为发票列表、费用列表。一个必要对应多个费用进行核销。
应用上,选择一个发票记录时,自动加载对应的同一业务下的费用,并计算出总费用金额。将费用总金额回写到选择的发票核销金额字段。
当发票有多行记录时,一切正常。当发票只有一条时,发生死循环。
?
调试:初步调试发现,如果只有一条发票时,费用加载完自己又清除掉,然后再加载。
?? ? ? ?查看Ext源代码,发现为Ext2.0的一个bug。在Ext2.2以后都已经解决。
?
过程:
1,回写发票的核销金额时,调用了Record的set方法。
?
/** * 解决Grid只有一条数据时,对该记录调用set方法时,会造成刷新/选择事件 *20101125.1 By Simon */Ext.grid.GridView.prototype.insertRows = function(dm, firstRow, lastRow, isUpdate) {if (!isUpdate && firstRow === 0 && lastRow >= dm.getCount() - 1) {//加入判断是否只是updatethis.refresh();} else {if (!isUpdate) {this.fireEvent("beforerowsinserted", this, firstRow, lastRow);}var html = this.renderRows(firstRow, lastRow);var before = this.getRow(firstRow);if (before) {Ext.DomHelper.insertHtml('beforeBegin', before, html);} else {Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html);}if (!isUpdate) {this.fireEvent("rowsinserted", this, firstRow, lastRow);this.processRows(firstRow);}}this.syncFocusEl(firstRow);};?
?
?
?
?
?