店舗が併設されたグリッドを取得した単純なケースがあります。
2つのボタンがあります。選択したレコードを変更するハンドラーを備えたもの。選択したレコードをコミットするハンドラーを持つもの。
レコードを選択して[編集]->[編集]を押すと、選択が行われます(失われたようgrid.geSelectionModel().getSelection()
に見えます)。電話をかけると、レコードがまだ選択されていることがわかります。それはそのようにそれを示していないだけです。
再度選択することはできません。最初に別のレコードを選択してから、レコードを選択し直す必要があります。
次に、レコードを選択してコミットボタンをクリックすると、値がコミットされますが、選択内容は「失われた」として再び表示されます。
これはバグですか?どうすればこれを修正できますか?選択範囲を表示したままにします。
サンプルコードは次のとおりです:(私はExt4.1.1を使用しています)
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
});
Ext.create('Ext.data.Store', {
storeId: 'simpsonsStore',
fields: ['name', 'email', 'phone'],
data: {
'items': [{
'name': 'Lisa',
"email": "lisa@simpsons.com",
"phone": "555-111-1224"
}, {
'name': 'Bart',
"email": "bart@simpsons.com",
"phone": "555-222-1234"
}, {
'name': 'Homer',
"email": "home@simpsons.com",
"phone": "555-222-1244"
}, {
'name': 'Marge',
"email": "marge@simpsons.com",
"phone": "555-222-1254"
}]
},
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'items'
}
}
});
Ext.create('Ext.container.Container', {
layout: 'fit',
renderTo: Ext.getBody(),
items: [{
xtype: 'grid',
store: Ext.data.StoreManager.lookup('simpsonsStore'),
columns: [{
text: 'Name',
dataIndex: 'name'
}, {
text: 'Email',
dataIndex: 'email',
flex: 1
}, {
text: 'Phone',
dataIndex: 'phone'
}],
height: 200,
buttons: [{
text: 'commit selection',
handler: function(){
this.up('grid').getSelectionModel().getSelection()[0].commit();
}
},{
text: 'set selection name to maggy',
handler: function(){
this.up('grid').getSelectionModel().getSelection()[0].set('name', 'Maggy');
}
}]
}]
});
アップデート:
煎茶フォーラムで報告しました。Mitchel Simoensは、Ext4.1.2で修正されたと言っています。残念ながら、「サポートサブスクライバーのみ」のバージョンです。
アップデート:
問題を特定して修正しようとしています。この問題は、onUpdateメソッドのExt.view.Tableクラスにあると思います。より正確には、このコードの一部です。
if (oldRowDom.mergeAttributes) {
oldRowDom.mergeAttributes(newRow, true);
} else {
newAttrs = newRow.attributes;
attLen = newAttrs.length;
for (i = 0; i < attLen; i++) {
attName = newAttrs[i].name;
if (attName !== 'id') {
oldRowDom.setAttribute(attName, newAttrs[i].value);
}
}
}
このコードをそのままにしておくのは悪い考えですか?コメントしましたが、現在は機能しているようですが、他の機能が損なわれることはありませんか?http://jsfiddle.net/Vandeplas/YZqch/10/