如何移除 DOJO 数据存储添加到我提取的项目中的所有额外字段

How do I remove all the extra fields that DOJO datastore adds to my fetched items?

本文关键字:项目 字段 提取 DOJO 何移 数据 存储 添加      更新时间:2023-09-26

从 DOJO 数据存储中获取项目时,DOJO 会向其添加大量额外字段。它还改变了数据的结构方式。

我知道我可以手动将每个项目重建为其初始形式(这需要我在每次更改 REST 对象时更新两个 JS 代码(,但肯定必须有更好的方法。

也许是一个store.detach(项目(或类似的东西?

dojo.data API 正在逐步淘汰,部分原因是额外的字段。 可以考虑使用新的dojo.store API。 存储 API 不会添加额外的字段。

我写了一个函数,可以做你想做的事情。它如下。 需要注意的一点是,我的函数将子对象转换为{ _reference: 'id' }表示法。 您可能需要不同的行为。

Util._detachItem = function(item) {
    var fnIncludeProperty = function(key) {
        return key !== '_0'
            && key !== '_RI'
            && key !== '_RRM'
            && key !== '_S'
            && key !== '__type'
    };
    var store = item._S;
    var fnCreateItemReference = function(itm) {
        if (store.isItem(itm)) {
            return { _reference: itm.id[0] };
        }
        return itm;
    };
    var fnProcessItem = function(itm) {
        var newItm = {};
        for(var k in itm) {
            if(fnIncludeProperty(k)) {
                if (dojo.isArray(itm[k])) {
                    // TODO this could be a problem with arrays with a single item
                    if (itm[k].length == 1) { 
                        newItm[k] = fnCreateItemReference(itm[k][0]);
                    } else {
                        var valArr = [];
                        dojo.forEach(itm[k], function(arrItm) {
                            valArr.push(fnCreateItemReference(arrItm));
                        });
                        newItm[k] = valArr;
                    }
                } else {
                    newItm[k] = fnCreateItemReference(itm[k]);
                }
            }
        }
        return newItm;
    };
    return fnProcessItem(item);
};

注意:这个函数是从我最初写的修改而来的,我没有测试上面的代码。