2
從DOJO數據存儲中獲取項目時,DOJO會爲其添加大量額外字段。它也改變了數據結構的方式。如何刪除DOJO數據存儲添加到我提取的項目中的所有額外字段?
我知道我可以手動重建曾經項,初步形成(這要求我進行更新,這兩個JS代碼,每次我改變我的REST的對象),但肯定有是一個更好的辦法。
也許是一個store.detach(item)或類似的東西?
從DOJO數據存儲中獲取項目時,DOJO會爲其添加大量額外字段。它也改變了數據結構的方式。如何刪除DOJO數據存儲添加到我提取的項目中的所有額外字段?
我知道我可以手動重建曾經項,初步形成(這要求我進行更新,這兩個JS代碼,每次我改變我的REST的對象),但肯定有是一個更好的辦法。
也許是一個store.detach(item)或類似的東西?
dojo.data
API正在被淘汰,部分原因是由於額外的字段。你可以考慮使用新的dojo.store
API。 store 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);
};
注意:該函數從我最初編寫的內容修改而來,並沒有測試上述代碼。
你對這些新data.store商店綁定到數據網格? – Greg
dojox.Grid仍然使用舊的Data API。但是,您可能會向網格提供您從商店手動檢索的項目數組。 SitePen有另一個數據網格選項,可用於https://github.com/SitePen/dgrid上的商店 –