0

我需要为网格表字段列表创建一个 json 字符串。并且需要将它们发送到 java 后端。

我必须发送

id,
name,
listOfProjects,

listOfProjects 包含以下列表,此列表可能包含项目数。

prjId,
prjName

请告诉我如何创建一个 json 字符串?

我尝试使用以下代码示例

var dataStr = new Object();

dataStr.id=myId;

dataStr.name="myName";

dataStr.plist = new Array();

dataStr.plist[0].prjId=1stId;
dataStr.plist[0].prjName="1stName";

dataStr.plist[1].prjId=2ndId;
dataStr.plist[1].prjName="2ndName";

dataStr.plist[2].prjId=3rdId;
dataStr.plist[2].prjName="3rdName";

var data = Ext.JSON.encode(dataStr);

Ext.Ajax.request({
    url : '/E2EAT/authentication/userdetails.json',
    method : "GET",
    headers: {
        'Content-Type': 'application/json'
    },
    params : 'data=' +  data ,
    useDefaultXhrHeader : false,
    withCredentials: true,
});

我可以使用上面的代码,但我需要迭代网格

1. 请让我知道如何使用 sencha 迭代网格?

2. 制作json字符串并发送后端的最佳方法是什么?

4

1 回答 1

1

Ext 为您提供了两个循环函数:Ext.eachExt.iteratefor 对象。

要遍历网格的列,您可以使用包含实例的Ext.grid.Panel#columns数组属性。Columns例如,为了构建可见列的列表,您可以执行以下操作:

var visibleColumns = [];
Ext.each(grid.columns, function(column) {
    // Only columns bound to a field (exludes actions colutions, etc.)
    if (!Ext.isEmpty(column.dataIndex)) {
        if (column.isVisible()) {
            visibleColumns.push({
                field: column.dataIndex
                ,label: column.text
            });
        }
    }
});

网格不一定对底层存储的每个字段都有一列,它可以有额外的列用于自定义呈现、操作、编号、选择等。因此,您可能希望迭代存储的字段,而不是的网格列。在这种情况下,我们将工作我们有Ext.data.Field对象:

// Get a ref to the store's model. Stores always have models; even
// if none is specified explicitly, one is created implicitly.
var model = grid.getStore().model;

var fieldNames = [];
Ext.each(model.getFields(), function(field) {
    fieldNames.push(field.name);
});

最后,您使用Ext.encode. 此外,您不必自己构建 URL 查询(参数),这将为可能需要添加一些参数的代码的其他部分提供更大的灵活性:

Ext.Ajax.request({
    ...
    params: {
        data: Ext.encode(rawData)
    }
});

对于 POST 请求,您还可以使用该jsonData属性来保存自己的 json 编码:

Ext.Ajax.request({
    ...
    jsonData: {
        data: rawData
    }
});

但是,在许多情况下,最好使用具有适当配置的数据代理写入器的存储,而不是直接 AJAX 请求。

于 2013-07-18T15:34:54.670 回答