Extjs 4.2:如何在特定网格列上应用base64编码和解码

时间:2016-03-30 09:44:19

标签: extjs extjs4.2

我需要在其中一个Grid列上应用base64编码,然后再将其提交到后端,然后我也必须对其进行解码。

我试过这样的事情:

在我的商店中,在同步之前:

beforesync: function(options, eOpts ){
    // Encode string
    options.create[0].data.ColumnText = btoa(options.create[0].data.ColumnText);
}

在我的模型的改变方法中,我这样做了:

{
    name: 'ColumnText',
    type: 'string',
    convert: function (value, records) {

        // Decoding Encoded Information
        return atob(value);
    }
}

当我尝试使用行编辑器插件添加新记录时出现问题,只要我创建新记录并尝试POST(提交按钮)它,新记录数据将由模型验证并在到达此行时:

return atob(value);

它抛出一个错误,表示值未正确编码,这是正确的,因为它是一个新创建的对象,我在我的商店的同步方法之前编码数据。

谁能告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我曾经使用过的一个解决方案是使用您在模型的转换方法中接收的记录对象。

您可以查找typeof" record.raw"。对于存储/提取的记录,它将是一个包含整个xml数据字符串的字符串。对于您通过行编辑器创建的新创建的记录,请输入" record.raw"将是一个对象(您的数据模型对象)。 像这样:

{
    name: 'COM_BLOG_Text',
    type: 'string',
    convert: function (value, records) {

        if(typeof records.raw.ColumnText == "undefined")
            // This means that it is an encoded stored record
            return atob(value);
        else
            // this means that it is a temporary/newly created object
            return value;
    }
}