2013-05-28 31 views
3

我注意到在元數據中有一個對象entityType,但也是一個對象enumType。breezejs:如何訪問枚舉元數據

我們使用manager.metadataStore.getEntityType()來訪問實體的元數據。

對於給定的枚舉,我們該怎麼做?我如何從元數據中創建客戶端的枚舉?

此外,當我將一個枚舉值賦給一個屬性時,我想按名稱而不是按值。

舉例來說,假設狀態的類型是myEnum的:的

myEntity.Status = myEnum.Valid; 

代替

myEntity.Status = 1; 

微風是否有任何輔助函數來訪問枚舉值?

+0

any for the?我的問題可能不夠清楚嗎? – Sam

回答

0

我假設您正在討論在服務器上定義爲.NET枚舉的數據屬性,並且您希望在Breeze客戶端上提供有關這些屬性的其他元數據。

不幸的是,Breeze還不支持枚舉類型以外的任何元數據,而不是支持枚舉值的.NET類型的名稱。這是將出現在服務器上的.NET Enum支持的任何dataProperty上的'enumType'屬性。 (我們確實需要更好地證明這一點)

請在Breeze User Voice上添加功能請求。這是個好主意,我們非常重視這些建議。

+1

這不完全是我的意思。我已經知道Breeze不支持.Net枚舉的元數據屬性。實際上,我已經在用戶語音上爲此功能打開了一個請求。我的意思是,我想使用像metadataStore.getEnumType()這樣的函數來訪問枚舉類型,所以我可以添加一個displayName屬性(它是javascript,所以我想我可以動態添加任何東西)。它有任何意義嗎? – Sam

+0

這是我熱切期待的東西......有沒有新的發展?我的項目中有很多枚舉,沒有這個支持,我必須將它們全部轉換爲實體並將它們作爲查找表。 – newman

+0

這當然是在我們的名單上,但我們傾向於根據用戶語音確定優先級。所以請投票!如果您確實需要立即採取措施,我們可以通過[email protected]提供定製的擴展程序,以便通過我們的諮詢部門輕鬆實現。 –

2

這個問題在我寫的時候仍然是開放的。但是,您可能需要查看this SO question答案中所述的解決方法。

+0

謝謝,我會看看它。 – Sam

0

那麼這不是你的問題的確切解決方案,但肯定可以幫助那些正在生成元數據的人離線。 我爲我的web項目使用NancyFx(無EF)+ Breeze + AngularJS並在離線生成微風元數據(在開發中使用EF方法),然後在js文件中使用它。
我也遇到過類似的情況,我想要獲取所有枚舉值綁定下拉列表並顯示EnumValue(Id)對應的EnumName。我在網上搜索,但根據我的情況並沒有太多。

所以我寫了原始JS方法 1.從元數據中提取JS字典(關聯數組)中的所有枚舉及其值(Id &名稱)。

var enumDictionary = {}; 

     JSON.parse(window.app.metadata).schema.enumType.forEach(function (enumType) { 
      var newEnumValues = []; 

      enumType.member.forEach(function (enumValue) { 
       var newEnumValue = { id: enumValue.value, name: enumValue.name }; 
       newEnumValues.push(newEnumValue); 
      }); 

      enumDictionary[enumType.name] = newEnumValues; 
     }); 
  • 我創建的方法來獲取所有枚舉值用於特定的枚舉。這將用於綁定下拉菜單。

    function GetEnumDictionary(enumName) { 
    return enumDictionary[enumName]; 
    } 
    
  • 我創建的另一種方法是基於值獲取特定的枚舉名稱。

    function GetEnumDictionaryValue(enumName, enumValueId) { 
    var result = null; 
    enumDictionary[enumName].some(function (enumValue) { 
    if (enumValue.id == enumValueId) { 
        result = enumValue.name; 
        return; 
    } 
    }); 
    
        return result; 
    }