Ext.data.Storeを使用して、クエリで使用されるフィールド(一意の名前、テーブル、フィールド、ユーザーフレンドリーなタイトル)に関するメタデータを含むJSON応答を返すPHPスクリプトを呼び出しています。次に、各Ext.data.Recordオブジェクトをループして、必要なデータを配列(this_column
)に配置し、その配列を別の配列()の最後にプッシュしてcolumns
、最終的にこれをExt.grid.ColumnModelオブジェクトに渡します。
私が抱えている問題は、テストしているクエリに関係なく(サイズと複雑さが異なる多数のクエリがあります)、columns配列は常に期待どおりに機能しcolumns[15]
ます。でcolumns[16]
、そのポイントとそれ以前のすべてのインデックスは、の値で埋められますcolumns[15]
。この動作は、配列全体が同じ値で構成されている場合に、ループがExt.data.Storeオブジェクトの最後に到達するまで続きます。
ここにいくつかのコードがあります:
columns = [];
this_column = [];
var MetaData = Ext.data.Record.create([
{name: 'id'},
{name: 'table'},
{name: 'field'},
{name: 'title'}
]);
// Query the server for metadata for the query we're about to run
metaDataStore = new Ext.data.Store({
autoLoad: true,
reader: new Ext.data.JsonReader({
totalProperty: 'results',
root: 'fields',
id: 'id'
}, MetaData),
proxy: new Ext.data.HttpProxy({
url: 'index.php/' + type + '/' + slug
}),
listeners: {
'load': function () {
metaDataStore.each(function(r) {
this_column['id'] = r.data['id'];
this_column['header'] = r.data['title'];
this_column['sortable'] = true;
this_column['dataIndex'] = r.data['table'] + '.' + r.data['field'];
// This display valid information, through the entire process
console.info(this_column['id'] + ' : ' + this_column['header'] + ' : ' + this_column['sortable'] + ' : ' + this_column['dataIndex']);
columns.push(this_column);
});
// This goes nuts at columns[15]
console.info(columns);
gridColModel = new Ext.grid.ColumnModel({
columns: columns
});