2014-02-19 28 views
1

如何在WinJS中進行枚舉?WinJS枚舉

我試圖讓一類像這樣的例子:

(function() { 
"use strict"; 

var TaskEnum = WinJS.Class.define(
null, 
{}, 
// The set of static members. 
{ 
    SUPERVISION: 1, 
    DIG: 2, 
    MAP: 3, 
}); 


var Task = new TaskEnum(); 

WinJS.Namespace.define("ENUMS", { 
    TASK: { 
     get: function() { 
      return Task; 
     } 
    } 
}); 


})(); 

但是,當我打電話ENUMS.TASK.DIG然後DIG是不確定的。

我甚至嘗試了這一點:

WinJS.Namespace.define("ENUMS", { 
    TASK: { SUPERVISION: 1, DIG: 2, MAP: 3, } 
}); 

但是,當我打電話ENUMS.TASK.DIG然後DIG仍然是不確定的。

它似乎像Namespace.define不以這種方式工作?

回答

1

ohk,如果我確切地得到你,那麼你想在JavaScript中定義Enumeration? 對不對? 對於這種情況,如果它與WinJs或不Windows Store App完成, 但我有兩個建議,我的回答,我不認爲:

1)使用C#Runtime Component執行此操作,通過定義一個函數c#並簡單地在你的JavaScript上調用它。

See ,Creating a simple component in C#.

2)Enumerated types in JavaScript

或參閱:WinJS.UI命名空間
http://207.46.99.208/pl-pl/library/windows/apps/br229782#enums_section

+0

如果你成功創建WinJs Enumeration,那麼不要忘了發佈你的答案。@Maurizio在丹麥 –

+0

我認爲你可能是正確的RT組件。看起來這就是他們在WinJS –

+0

中做自己的枚舉的方式Ya,Right Mr @Maurizio在丹麥,通過添加thies運行時組件,您將明確有能力輕鬆操縱任何數據類型。 –

1

我可能不明白你希望從Namespace定義中得到什麼,但不只是使用核心JavaScript?

window.ENUMS = { 
    TASK: { 
     SUPERVISION: 1, 
     DIG: 2, 
     MAP: 3 
    } 
}; 

然後使用它就像你正在嘗試:

callSomeFunction(ENUMS.TASK.DIG); 

需要注意的是,如果你可以限制用戶對IE11(在Win8中的應用程序並不困難),那麼你可以使用JavaScript constants通過const爲好。

+1

是的,這是一個簡單而漂亮的解決方案,但是他們怎麼做他們的枚舉winjs?我看了一眼,無法理解。他們似乎使他們在一個RTcomponent,也許在C# –

+0

JS實際上並沒有一個枚舉的概念。你可以用這樣的對象模仿一個。 WinJS類和名稱空間助手並不神奇,它們只是每個人都使用的常見模式的形式化。 我不明白爲什麼你的WinJS.Namespace.define例子不起作用。這與將TASK對象附加到window/self中的做法相同,並且應該可以正常工作。 –

+0

哦,沒有WinJS不使用C#或任何WinRT組件。 WinRT API表面本身(獨立於WinJS)使用WinRT類型系統公開枚舉。 WinJS枚舉只是JS對象文字。只要看看代碼,就可以看到所有代碼。例如,來自base.js線121(WinJS 2.0): VAR LazyStates = { 未初始化:1,工作 :2, 初始化:3, }; –