我有一个在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();
答案 0 :(得分:1)
IMO,这是我们在ExtJS中面临的最复杂但最常见的问题之一。它必须经常解决,但大多数解决方案必须根据具体要求略有不同。
网格绑定到完整商店,而不是单个记录。因此,如果要将数据从记录(例如,作为数组)获取到网格中,反之亦然,则必须在存储的数据与记录的单个字段中的值之间进行映射。例如,从商店获取所有数据,通用解决方案是
store.getRange().map(function(record) { return record.getData(); });
如果您只需要网格选择(可能只想使用checkboxselection
模型或类似)和/或只记录某些字段,则必须根据需要更改此代码,例如
grid.getSelectionModel().getSelection().map(function(record) {return record.get('Id'); });
因此,您的记录绑定到表单,表单由字段组成。如何将网格数据作为表单的一部分接受?
您必须在表单中添加hiddenfield
,并根据您的要求,覆盖四个函数中的一些setValue
,getValue
,getModelData
,{{1 }}。通常,getSubmitValue
尝试将其值转换为字符串,但显然,您需要在那里允许数组;并且您希望在调用hiddenfield
时修改网格,或者在调用其中一个getter时从网格中读取值。这四个函数用于以下内容:
setValue
应该用于根据您在记录中找到的值修改网格。setValue
用于比较操作(检查值是否已更改,这意味着表单是脏的,必须提交等),如果您致电getValue
。您应该根据其中的网格状态返回一些值。form.getValues
由getModelData
方法使用;它应该返回一个模型字段的转换方法可以使用的值。
{li> form.updateRecord
由getSubmitValue
方法使用,它应该返回一个可以安全地传输到服务器的值(如果表单没有form.submit
,则必须是一个字符串设置)
我无法为您提供这些实施的确切配方,因为它们特定于您的要求。