将数据从网格行加载到(弹出)表单中进行编辑

时间:2012-07-09 14:32:12

标签: extjs formpanel loaddata

我在Ext JS in Action(由J. Garcia撰写)中读到,如果我们有一个Ext.data.Record实例,我们可以使用表单的loadRecord方法来设置表单的值。但是,他没有提供这方面的实例(在他使用数据的示例中,通过名为data.php的文件将其加载到表单中)。我搜索了很多论坛,发现以下条目很有帮助,因为它给了我一个如何通过使用form的loadRecord方法来解决我的问题的想法: load data from grid to form

现在我的商店和网格的代码如下:

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,当用户单击Edit图标时,该表单的ID应该出现。然后应该使用网格行中的正确数据自动填充该弹出窗体。

但是我的代码无效。我在'formpanel.getForm()。loadRecord(rec)'行中收到错误 - 它表示'Microsoft JScript运行时错误:'undefined'为null或者不是对象'。

有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:1)

在EditUser函数中未定义Rec。您将一个ID作为参数提供给EditUser,您需要将记录作为参数提供给它。

//The call
EditUser(rec);

function EditUser(rec) {
    var formpanel = Ext.getCmp('CreateUserForm'); 
    formpanel.getForm().loadRecord(rec);     
}