2013-05-04 7 views
2

열거 형을 구현하고 싶습니다. 열거 형 Visibility = visible | 숨겨진 | 접힌다트의 WebUI HTML 템플릿에 액세스 할 수있는 enum을 구현하려면 어떻게해야합니까?

나는 이것을 HTML 코드에서 설정하고 싶습니다. 컴파일러가 1에서 int, true, bool 등의 HTML에서 문자열 속성 값을 구문 분석 할 수있는 마법이 있습니다. 문자열에서 파싱 할 수있는 클래스를 허용 할 수있는 방법이 있습니까?

답변

4

다트는 아직 열거 형을 공식적으로 지원하지 않습니다. 우리는 미래에 열거 형을 추가 할 것으로 예상 : 한편 http://news.dartlang.org/2013/04/enum-proposal-for-dart.html

, 여기에 열거 에뮬레이트하는 일반적인 패턴이다 : 웹 UI의 사용자 정의 요소를 만들려면

class Enum { 
    final _value; 
    const Enum._internal(this._value); 
    toString() => 'Enum.$_value'; 

    static const FOO = const Enum._internal('FOO'); 
    static const BAR = const Enum._internal('BAR'); 
    static const BAZ = const Enum._internal('BAZ'); 
} 

How can I build an enum with Dart?

에서 온 그 열거 형 필드를 가지고 있다면 setter 및 getter를 사용하여 문자열 (HTML에서)을 열거 형으로 변환 할 수 있습니다.

import 'package:web_ui/web_ui.dart'; 

class Color { 
    final _value; 
    const Color._internal(this._value); 
    factory Color(String value) { 
    switch (value) { 
     case 'RED': 
     return Color.RED; 
     case 'BLUE': 
     return Color.BLUE; 
     case 'GREEN': 
     return Color.GREEN; 
     default: 
     throw 'not a color'; 
    } 
    } 
    toString() => 'Color.$_value'; 

    static const RED = const Color._internal('RED'); 
    static const BLUE = const Color._internal('BLUE'); 
    static const GREEN = const Color._internal('GREEN'); 
} 

class PersonComponent extends WebComponent { 
    Color favoriteColor; 

    String get favColor => ((x) => x == null ? null : x._value)(favoriteColor); 

    void set favColor(String value) { 
    favoriteColor = new Color(value); 
    } 
} 

를, 그리고, HTML은 다음과 같습니다 :이 같은

뭔가 작업을해야 내가 거기에 기대했다

<html> 
    <body> 
    <element name="x-person" extends="div" constructor="PersonComponent"> 
     <template> 
     <div> 
      Favorite Color: <select bind-value="favColor"> 
      <option>RED</option> 
      <option>GREEN</option> 
      <option>BLUE</option> 
      </select> 
     </div> 
     <div> 
      You picked {{favoriteColor}} 
     </div> 
     </template> 
     <script type="application/dart" src="person_component.dart"></script> 
    </element> 
    </body> 
</html> 
+0

파서 기능을 지정하는 몇 가지 방법이 될 것입니다. 이런 종류의 클래스 인터페이스를 오염시킵니다. 답변 해주셔서 감사합니다. – jz87

+0

필터를 추가 할 예정이므로 HTML에서이 작업을 수행 할 수 있습니다. bind-value = "color | toColorEnum"과 같은 것입니다. –