Ext JS in Action(J. Garciaによる)で、Ext.data.Recordのインスタンスがある場合、フォームのloadRecordメソッドを使用してフォームの値を設定できることを読みました。ただし、彼はこれの実用的な例を示していません(彼がデータを使用する例では、data.phpというファイルを介してフォームにロードされます)。私は多くのフォーラムを検索し、フォームのloadRecordメソッドを使用して問題を解決する方法についてのアイデアを与えてくれた次のエントリが役に立ちました: グリッドからフォームにデータをロードする
これで、ストアとグリッドのコードは次のようになります。
var userstore = Ext.create('Ext.data.Store', {
storeId: 'viewUsersStore',
model: 'Configs',
autoLoad: true,
proxy: {
type: 'ajax',
url: '/user/getuserviewdata.castle',
reader: {
type: 'json',
root: 'users'
},
listeners: {
exception: function (proxy, response, operation, eOpts) {
Ext.MessageBox.alert("Error", "Session has timed-out. Please re-login and try again.");
}
}
}
});
var grid = Ext.create('Ext.grid.Panel', {
id: 'viewUsersGrid',
title: 'List of all users',
store: Ext.data.StoreManager.lookup('viewUsersStore'),
columns: [
{ header: 'Username', dataIndex: 'username' },
{ header: 'Full Name', dataIndex: 'fullName' },
{ header: 'Company', dataIndex: 'companyName' },
{ header: 'Latest Time Login', dataIndex: 'lastLogin' },
{ header: 'Current Status', dataIndex: 'status' },
{ header: 'Edit',
menuDisabled: true,
sortable: false,
xtype: 'actioncolumn',
width: 50,
items: [{
icon: '../../../Content/ext/img/icons/fam/user_edit.png',
tooltip: 'Edit user',
handler: function (grid, rowIndex, colIndex) {
var rec = userstore.getAt(rowIndex);
alert("Edit " + rec.get('username')+ "?");
EditUser(rec.get('id'));
}
}]
},
]
});
function EditUser(id) {
//I think I need to have this code here - I don't think it's complete/correct though
var formpanel = Ext.getCmp('CreateUserForm');
formpanel.getForm().loadRecord(rec);
}
「CreateUserForm」は、既存のフォームのIDであり、ユーザーが「編集」アイコンをクリックすると表示されます。そのポップアップフォームには、グリッド行からの正しいデータが自動的に入力されます。
しかし、私のコードは機能していません。'formpanel.getForm()。loadRecord(rec)'という行でエラーが発生します-'Microsoft JScriptランタイムエラー:' undefined'がnullであるか、オブジェクトではありません'。
これを解決するためのヒントはありますか?