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>
Я надеялся, что будет какой-то способ, чтобы определить функцию синтаксического анализатора. Этот тип загрязняет интерфейс для класса. Спасибо за ответ. – jz87
Мы ожидаем добавления фильтров, поэтому вы сможете сделать это в HTML. Что-то вроде bind-value = "color | toColorEnum". –