2013-12-18 62 views
0

在我正在開發的應用程序中,我創建了一些基於微風元數據和我的類和屬性上的屬性生成的UI小部件。因此,在服務器上,我讀取了屬性,並將它們添加到breeze的生成元數據中。在客戶端上,我加載元數據後,在類型上添加這些屬性。 這個 的例子(在客戶端上,後豐富元數據負載):將自定義數據添加到服務器上的微風元數據

function finishMetadata(md) { 

    for (var i = 0; i < md.schema.entityType.length; i++) { 
     var et = md.schema.entityType[i]; 
     var etype = manager.metadataStore.getEntityType(et.name); 

     //isExportable is a class attribute 
     etype.isExportable = et.isExportable; 

     for (var j = 0; j < et.property.length; j++) { 
      var p = et.property[j]; 
      var prop = etype.getProperty(p.name); 
      //displayName is a property attribute 
      prop.displayName = p.displayName ? p.displayName : p.name; 
     } 
    } 
} 

這一點,當我打電話manager.metadataStore.getEntityType(entityName),我得到的所有的EntityType數據,包括屬性,所有的屬性我添加到服務器上。

這工作得很好,直到今天。我已經在一些類(Customer:Person)上添加了繼承(TPT),並且由於Customer實體生成的元數據沒有Person屬性,因此我無法將它們添加到metadataStore類型。當我呼叫metadataStore.getEntityTypePerson,我得到的所有屬性,但當我打電話給Customer我沒有得到我的自定義屬性(這是因爲上面的代碼Customer沒有列出父Person屬性,所以我沒有機會插入我的自定義屬性

無論如何,這感覺hacky和凌亂,甚至解釋它。所以我們在這裏,微風1.4.7版本,我不知道是否有一種更簡單的方法添加自定義數據元數據不會與TPT斷開?

PS:我知道我可以手工製作元數據,但是我想盡可能地使用默認值以避免將來發生變化的問題。所有的元數據變化應該是最小的和自動的,基於類。

回答

1

那麼,我結束了進一步下去的方式,我正在做的事情。而不是僅僅使用manager.metadataStore.getEntityType來獲取類型數據(這不會帶來我的自定義元數據),而是查看我的entityType是否具有baseType,如果是,則加載該基類型數據並將其與子類合併。在我的情況下,基本上我得到Person的dataProperties,並使用它們而不是Customer的dataProperties。它的工作原理,但我仍然在尋找一種更乾淨,更簡單的方式來做這樣的事情。

相關問題