Как мне удалить все дополнительные поля, которые DOJO datastore добавляет к моим выбранным элементам?
При извлечении элемента из хранилища данных DOJO DOJO добавляет к нему множество дополнительных полей. Это также меняет структуру данных.
Я знаю, что мог бы вручную перестроить любой элемент в его первоначальную форму (это потребовало бы от меня обновления обоих JS-кодов каждый раз, когда я меняю свой объект REST), но, безусловно, должен быть лучший способ.
Возможно store.detach(предмет) или что-то в этом роде?
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);
};
ПРИМЕЧАНИЕ: эта функция изменена по сравнению с тем, что я написал изначально, и я не тестировал приведенный выше код.