2012-05-18 66 views
2

從DOJO數據存儲中獲取項目時,DOJO會爲其添加大量額外字段。它也改變了數據結構的方式。如何刪除DOJO數據存儲添加到我提取的項目中的所有額外字段?

我知道我可以手動重建曾經項,初步形成(這要求我進行更新,這兩個JS代碼,每次我改變我的REST的對象),但肯定有是一個更好的辦法。

也許是一個store.detach(item)或類似的東西?

回答

1

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); 
}; 

注意:該函數從我最初編寫的內容修改而來,並沒有測試上述代碼。

+0

你對這些新data.store商店綁定到數據網格? – Greg

+0

dojox.Grid仍然使用舊的Data API。但是,您可能會向網格提供您從商店手動檢索的項目數組。 SitePen有另一個數據網格選項,可用於https://github.com/SitePen/dgrid上的商店 –

相關問題