向网格添加行,然后单击它时,会选择(并突出显示)它。然后,单击其他位置,但新行仍然突出显示(所以现在有突出显示的行)。
拜托,有谁知道问题可能是什么?如何使其正常运行,即点击一行取消选择(去突出显示)另一行?
我重新加载页面后(所以新行不再是新行),一切都按预期工作。
修改:以下是添加行的代码:
var rec = new store.recordType({
test: 'test'
});
store.add(rec);
编辑2 :问题似乎是listful: true
。如果是false
,那就有效!但是我需要它true
所以我进一步看这个...看起来好像ID出现了错误...如果ID会改变(我首先创建记录,然后是服务器)返回正确的ID,这也会混淆行选择器,没有?)
答案 0 :(得分:0)
看起来为您的网格启用了多选。您可以使用Ext.grid.RowSelectionModel配置网格的选择模型。
通过在网格面板中配置sm(选择模型)将您的选择模型设置为单选,如下所示:
sm: new Ext.grid.RowSelectionModel({singleSelect:true})
<强>更新强>
尝试使用网格存储的load方法或loadData方法重新加载网格。您是否在客户端更新网格?那么也许你可以使用loadData方法。如果您使用从远程获取数据..您可以使用加载方法。我使用load方法用新记录更新我的网格(在添加,刷新等一些用户操作之后)。或者您可以按如下方式重新加载:
grid.getStore().reload();
答案 1 :(得分:0)
(注意,正确为ExtJS 3.3.1)
首先,这是我快速而又肮脏的黑客行为。巧合的是,我的系统中扩展了CheckboxSelectionModel
: -
Kore.ux.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.CheckboxSelectionModel, {
clearSelections : function(fast){
if(this.isLocked()){
return;
}
if(fast !== true){
var ds = this.grid.store,
s = this.selections;
s.each(function(r){
//Hack, ds.indexOfId(r.id) is not correct.
//Inherited problem from Store.reader.realize function
this.deselectRow(ds.indexOf(r));
//this.deselectRow(ds.indexOfId(r.id));
}, this);
s.clear();
}else{
this.selections.clear();
}
this.last = false;
}
});
这是clearSelections
失败的地方。他们尝试使用ds.indexOfId(r.id)
取消选择行,它将返回-1
,因为我们没有定义索引remapped
。
这就是为什么我们找不到id: -
http://imageshack.us/photo/my-images/864/ssstore.gif/
请注意,图像中的第一项未正确“重新映射”。这是因为我们Ext.data.Store
中的“reMap”函数存在问题,如下所示: -
// remap record ids in MixedCollection after records have been realized. @see Store#onCreateRecords, @see DataReader#realize
reMap : function(record) {
if (Ext.isArray(record)) {
for (var i = 0, len = record.length; i < len; i++) {
this.reMap(record[i]);
}
} else {
delete this.data.map[record._phid];
this.data.map[record.id] = record;
var index = this.data.keys.indexOf(record._phid);
this.data.keys.splice(index, 1, record.id);
delete record._phid;
}
}
显然,这种方法无法解雇(或错误)。进一步追踪,此方法由Ext.data.Store.onCreateRecords
....
this.reader.realize(rs, data);
this.reMap(rs);
....
第一眼看上去确实很好,但是当我追踪rs
和data
时,这些数据在this.reader.realize
函数后神奇地设置为未定义,因此reMap
可以不要将幻像记录映射回正常记录。
我不知道这个函数有什么问题,我不知道如何在JsonReader
中覆盖这个函数。 如果你们中的任何人碰巧有空,请帮助我们进一步追查导致此问题的罪魁祸首
干杯
梅西