Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除DOJO数据存储添加到已获取项中的所有额外字段?_Javascript_Rest_Dojo_Datastore - Fatal编程技术网

Javascript 如何删除DOJO数据存储添加到已获取项中的所有额外字段?

Javascript 如何删除DOJO数据存储添加到已获取项中的所有额外字段?,javascript,rest,dojo,datastore,Javascript,Rest,Dojo,Datastore,从DOJO数据存储中获取项时,DOJO会向其中添加大量额外字段。它还改变了数据结构的方式 我知道我可以手动将ever项重新构建为它的初始形式(这需要我每次更改REST对象时都对这两个JS代码进行更新),但肯定有更好的方法 可能是一个store.detach(item)或类似的东西?dojo.dataAPI正在逐步淘汰,部分原因是额外的字段。可以考虑使用新的 doj.Sturt API。存储api不添加额外字段 我已经编写了一个函数,它可以完成您希望执行的操作。接下来就是。需要注意的是,我的函数将

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

我知道我可以手动将ever项重新构建为它的初始形式(这需要我每次更改REST对象时都对这两个JS代码进行更新),但肯定有更好的方法


可能是一个store.detach(item)或类似的东西?

dojo.dataAPI正在逐步淘汰,部分原因是额外的字段。可以考虑使用新的<代码> doj.Sturt API。存储api不添加额外字段

我已经编写了一个函数,它可以完成您希望执行的操作。接下来就是。需要注意的是,我的函数将子对象转换为
{u 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);
};

注意:此函数是根据我最初编写的代码修改的,我没有测试上述代码。

这些新的data.store存储是否绑定到datagrids?dojox.Grid仍然使用旧的data API。但是,您可以为网格提供一个从存储中手动检索的items数组。SitePen还有另一个datagrid选项,可用于以下位置的存储: