MyCalendarEvent 与一个 Task相关联,也就是个外键,使用 SelectItem来选择相应的 Task。
很自然的就用到了 taskSelectItem.setOptionDataSource( DataSource.get("task"));
按理说这是个很简单的事情,结果就出错了,报告说 getOptionDataSource 是 null。
非常奇怪,如果是个 ListGrid 里面这么用,设置 ListGridField的 optionDataSource就没事。
很是灵异。
于是用FireBug跟踪了一下,在 getOptionDataSource的时候,它会判断一下 optionDataSource
是String对象还是 DataSource对象,如果是 String 对象,会到一个 DataSource 的 Map 里面去取
相应的 DataSource。只是奇怪的是,这个时候,optionDataSource 是一个 String,而且是一个
[DataSource ID:task] 这样的 String。这样,自然在 DataSource的Map里面是取不到 DataSource的。
于是就会爆出刚才那个异常。
没有仔细去研究js代码,但是感觉就是它把 optionDataSource 对象用 toString搞了一下,导致出现了key
不对的现象。估计是一个bug,懒得深入去搞了,用了一个简单办法绕过去了。
taskSelectItem.setAttribute("optionDataSource", "task");
就这样ok了。用的SmartGWT 版本是2.1, EE的版本也是2.1