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