通过请求有效负载将网格面板数据传递给REST控制器

时间:2017-06-10 04:19:41

标签: rest extjs controller request payload

我有一个在extjs框架中创建的用户表单。用户表单具有许多用户字段,这些用户字段作为请求有效负载的一部分传递给REST控制器。 我正在尝试向用户表单添加一个网格面板(很可能是一个包含多行和列的表格格式)。 但我不确定如何将网格面板数据作为请求有效负载的一部分传递给REST控制器。 如果需要更多细节,我会发布更多代码。 任何帮助,将不胜感激。感谢。

Ext.define('soylentgreen.view.admin.UserForm', {
    extend : 'Ext.form.Panel',
    alias : 'widget.userform',
    bodyStyle : 'padding:5px 5px 0',

// some userform elements like firstname,lastname, go here.....

name : 'userTeamGrid',
  xtype : 'gridpanel',
id : 'userTeamGrid',
itemId : 'userTeamGrid',
multiSelect : true,
selModel : Ext.create(
        'Ext.selection.CheckboxModel',
        {
          injectCheckbox : 'first',
          mode : 'MULTI',
          checkOnly : false
        }),
anchor : '100%',
width : '700px',
height : 250,
flex : 1,
store : 'userTeamStore',

var user = form.getRecord();
form.updateRecord(user);
user.save({
        callback : function(records, operation){
          //reset the (static) proxy extraParams object
          user.getProxy().extraParams =  {
            requestType: 'standard'
          }
          if(!operation.wasSuccessful()){
            var error = operation.getError();

1 个答案:

答案 0 :(得分:1)

IMO,这是我们在ExtJS中面临的最复杂但最常见的问题之一。它必须经常解决,但大多数解决方案必须根据具体要求略有不同。

网格绑定到完整商店,而不是单个记录。因此,如果要将数据从记录(例如,作为数组)获取到网格中,反之亦然,则必须在存储的数据与记录的单个字段中的值之间进行映射。例如,从商店获取所有数据,通用解决方案是

store.getRange().map(function(record) { return record.getData(); });

如果您只需要网格选择(可能只想使用checkboxselection模型或类似)和/或只记录某些字段,则必须根据需要更改此代码,例如

grid.getSelectionModel().getSelection().map(function(record) {return record.get('Id'); });

因此,您的记录绑定到表单,表单由字段组成。如何将网格数据作为表单的一部分接受?

您必须在表单中添加hiddenfield,并根据您的要求,覆盖四个函数中的一些setValuegetValuegetModelData,{{1 }}。通常,getSubmitValue尝试将其值转换为字符串,但显然,您需要在那里允许数组;并且您希望在调用hiddenfield时修改网格,或者在调用其中一个getter时从网格中读取值。这四个函数用于以下内容:

  • setValue应该用于根据您在记录中找到的值修改网格。
  • setValue用于比较操作(检查值是否已更改,这意味着表单是脏的,必须提交等),如果您致电getValue。您应该根据其中的网格状态返回一些值。
  • {li> form.getValuesgetModelData方法使用;它应该返回一个模型字段的转换方法可以使用的值。 {li> form.updateRecordgetSubmitValue方法使用,它应该返回一个可以安全地传输到服务器的值(如果表单没有form.submit,则必须是一个字符串设置)

我无法为您提供这些实施的确切配方,因为它们特定于您的要求。