从DOJO数据存储区中获取项目时,DOJO会为其添加大量额外字段。它还改变了数据结构的方式。
我知道我可以手动重建任何项目到它的初始形式(这将要求我每次更改我的REST对象时都对这两个JS代码进行更新),但肯定有更好的方法。
也许是store.detach(item)或类似的东西?
答案 0 :(得分:1)
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);
};
注意:此功能是根据我最初编写的内容修改的,我没有测试上面的代码。