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

Extjs 4.2: How to apply base64 encoding and decoding on a particular grid column

我需要在其中一个网格列上应用 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);

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

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

我曾经使用过的解决方案之一是利用您在 convert[=17= 中收到的 record 对象] 模型的方法。

你可以寻找typeof "record.raw"。对于 stored/fetched 记录,它将是一个包含整个 xml 数据字符串的字符串。对于您通过行编辑器创建的新创建的记录,typeof "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;
    }
}