2013-05-04 2 views
2

Я хотел бы ввести перечисление: enum Видимость = вид | скрытый | collapsedКак реализовать перечисления, доступные для HTML-шаблонов WebUI в дротике?

Я хотел был бы иметь возможность установить это в HTML-коде. Существует некоторая магия, которая позволяет компилятору разобрать значение атрибута строки в HTML, например 1, int, true для bool и т. Д. Есть ли способ, позволяющий моему классу быть понятным из строки?

ответ

4

Dart еще не получил официальную поддержку для перечислений. Мы ожидаем, чтобы добавить перечислений в будущем: http://news.dartlang.org/2013/04/enum-proposal-for-dart.html

В то же время, здесь общий шаблон для подражания перечислений:

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?

Для создания веб-интерфейса пользовательский элемент, имеет поле перечисления, вы можете использовать сеттеры и геттеры для преобразования из строки (из 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". –

Смежные вопросы