我按照说明操作:
创建bean。这个bean用于使用RestyGWT从服务器传输到客户端的枚举。
public enum Mode{
MODIFY,
EDIT,
DELETE,
CREATE
}
在bean上定义标记。
@BEAN(Mode.class)
static public class ModelMarker implements BeanModelMarker { }
(从GXT博客中解释声明)现在在任何数据组件上使用BeanModelMarker。
所以,我创建了一个组合框。
static private ComboBox<ModelMarker> propertyTypeComboBox =
new ComboBox<ModelMarker>();
Ooops,ComboBox不接受BeanModelMarker作为Model类型。它肯定是错的,因为它尚未创建GWT。
那么我如何处理GWT创建的实例呢?
static ModelMarker beanModel =
GWT.create(ModelMarker.class);
在找到BeanModelMarker之后,我无法找到任何明确告诉我如何使用BeanModelMarker的文献。我该如何使用它?
我想知道我需要做什么来定义Bean或Base模型,这样我就可以在我的数据驱动组合框中使用枚举。
我是否以正确的方式提出有关BeanModelMarker的问题?这与我创建枚举驱动的组合框的尝试有关吗?
答案 0 :(得分:1)
几点想法:
以下是关于在ComboBox中包装enum
类型的GXT论坛的讨论。 http://www.sencha.com/forum/showthread.php?67317-Enum-based-ComboBox。使用了几种方法 - 在该线程中,我采用了制作EnumWrapper的方法,以及一些静态便捷方法来创建List<EnumWrapper<MyEnum>>
集合以提供给组合框ListStore。与BeanModel方法相反,我采用的主要原因之一是我需要我的枚举能够支持i18n,并且在枚举本身中并不需要i18n逻辑。
与您的问题更相关,将java对象转换为BeanModel的正确方法是使用BeanModelFactory
提供的BeanModelLookup.getFactory(Mode.class)
实例。 ModelMarker
只是一个界面,无法实现ModelData
,因此您的ComboBox<ModelMarker>
声明并不真正有意义。请记住,使用此方法意味着您的Mode
枚举需要公开getter,以便BeanModel
代代码能够发挥其反射效果(如http://www.sencha.com/forum/showthread.php?67317-Enum-based-ComboBox&p=332996&viewfull=1#post332996中所示)。
ComboBox<BeanModel> modeCombo = new ComboBox<BeanModel>();
ListStore<BeanModel> store = new ListStore<BeanModel>();
// this next line might need ModelMarker.class instead, its been a while
BeanModelFactory modeFactory = BeanModelLookup.get().getFactory(Mode.class);
// either add items one at a time
Mode mode = Mode.EDIT;
store.add(modeFactory.createModel(mode));
// or add a collection
store.add(modeFactory.createModel(Arrays.asList(Mode.values()));