GridViewのinitは()(これは、グリッドのonRender()
から呼ばれる)と呼ばれるまで、店の「追加」イベントのGridViewのリスナーがビューに追加されていないように見えます。これは、グリッドがレンダリングされるときに発生します(win.show())。 GridViewのprocessRows()
のExt.fly(rows[0]).addClass(this.firstRowCls);
に決して衝突しなかったので、#2(insert-insert-show)でエラーが表示されませんでした。
私は、コードにinitとonAdd(店のためのハンドラがイベントを追加)GridViewsにいくつかのログをプリントアウトするためにビットを変更:ここで
Ext.onReady(function(){
var cm = new Ext.grid.ColumnModel({
columns: [{
dataIndex: 'common',
editor: new Ext.form.TextField({allowBlank: false})
}]
});
var store = new Ext.data.Store({
reader: new Ext.data.JsonReader({
record: 'plant',
fields: [{name: 'common', type: 'string'}]
})
});
var grid = new Ext.grid.EditorGridPanel({
store: store,
cm: cm,
region: "center",
view: new Ext.grid.GridView({
init : function(grid) {
console.log("\tinit()");
this.grid = grid;
this.initTemplates();
this.initData(grid.store, grid.colModel);
this.initUI(grid);
},
onAdd : function(store, records, index) {
console.log("\t\tadding: ", records[0].id);
this.insertRows(store, index, index + (records.length-1));
}
})
});
var win = new Ext.Window({
layout: "border",
items: [grid],
width : 300,
height : 300
});
var Rec = grid.getStore().recordType;
/*
console.log("show-insert-insert");
win.show();
console.log("\t1st insert");
store.insert(0, new Rec());
console.log("\t2nd insert");
store.insert(0, new Rec());
*/
console.log("insert-insert-show");
console.log("\t1st insert");
store.insert(0, new Rec());
console.log("\t2nd insert");
store.insert(0, new Rec());
console.log("win.show()");
win.show();
});
は、3つの異なる例からコンソールです:
show-insert-insert
init()
1st insert
adding: ext-record-1
2nd insert
adding: ext-record-2
win.show()
insert-show-insert
1st insert
win.show()
init()
2nd insert
adding: ext-record-2
Ext.fly(rows[0]) is null
[Break On This Error]
Ext.fly(rows[0]).addClass(this.firstRowCls);
ext-all-debug.js (line 43959
insert-insert-show
1st insert
2nd insert
win.show()
init()
実際に両方のアイテムをGrid(およびGridView)に追加する唯一のケースは、show-insert-insertのケースです。私が今までに見つけたベストソリューションは、やるだけです。最初は、
win.show();
win.hide();
です。私はこれまでにもっと良い解決策を見いださなかった。私はこれが役立つことを願っています