在 calendar 当中,增加了一些 EventEditor Fields。
其中有两个 SelectItem,想用这两个 SelectItem 来做联动,但是怎么
也不成功。设置的 criterian 都不起作用。于是想偷懒,其中一个 SelectItem
变化时,把另外一个 disable掉,于是调用 otherSelectItem.disable()方法。
这时候,出现了一个异常,错误是 disable is not a function。
?
这个时候,不管是 disable 还是 hide,都是这样的一个异常。于是回忆以前曾经
也出现过这种错误,那时候是使用 grid 的 fetchData方法,而那个时候 grid 还
没有初始化,于是 fetchData 方法自然不存在。
?
同样的推理一下,莫非这个时候, selectItem 都还没有初始化?想到 Calendar
的特殊性,它不是我创建的一个 form,而是我使用 setEventEditorFields( ...) 来
设置的。也就是说,我设置的 field 都初始化了,但是这个可能只是一个模板,所以
在运行期来说,其实它是按照我的这个模板,另外创建了一个实例。而我创建的这个
field,在客户端根本就没有初始化。
?
想明白了这一点,事情就好办了。在 onChanged事件当中,可以获取到当前的form
然后使用当前的form来获取相应的field,再进行disable,就ok了。
?
可见在使用 SmartGWT的时候,很多实例的状态,是非常需要注意的。
印象中以前使用 Echo 的时候,也有类似的情况。以前似乎是 Grid 的 Editor 出现过这样的问题。
?
?
另外, 现在 form.getField,只能返回 TextItem。如果想要得到 SelectItem,必须这样做:
?
SelectItem item = new SelectItem( event.getForm().getField("other").getJsObject());?
?