个人理解TextProp,TextField,FieldAp,TextEdit之间关系原创
6人赞赏了该文章
687次浏览
编辑于2024年09月19日 19:48:18
开发了一段时间的动态添加控件,对苍穹的控件、模型有了一些理解。写个文章作为记录。
动态添加控件参考文章:
https://vip.kingdee.com/link/s/lHvZv
以下是一些个人理解:
TextProp对应 数据模型字段,需要在getEntityType()事件中添加数据模型,这样model里面才会有这个字段。如果没有向model里面设置数据模型,那么调用getModel().setValue(),对字段设置值,会失败。
TextField对应 字段类型,TextField就是对应了文本类型,可以看到源码中是这样写的:TextField extends Field<TextProp>
FieldAp对应 控件的设计期,是所有的字段控件(文本、整数、日期等控件)的设计期。
- FieldAp里面可以包裹字段类型,例如包裹一个文本字段fieldAp.setField(textField)。这样,FieldAp就可以看作是文本控件的设计期。
- FieldAp调用createRuntimeControl()可以创建一个运行期的控件对象FieldEdit,可以在onGetControl()事件中,将创建出来的控件对象作为返回值。
- FieldAp调用createControl()可以创建一个map表,这map表里面有构成这个控件所需的一些信息,可以在loadCustomControlMetas()事件中返回给前端。
TextEdit对应 控件的运行期,如果FieldAp设置的是字段类型是TextField,在FieldAp调用createRuntimeControl()的时候,会直接调用到TextField的createServerEditor()方法,可以看到里面创建的是TextEdit对象,而TextEdit正是继承了上面的FieldEdit。
控件、模型都创建完了,那beforeBindData()事件有什么用处?
TextEdit的父类Control,有一个view对象(其实就是苍穹运行期的视图对象),这个对象现在还是空的,我们可以在beforeBindData()事件中给控件设置视图对象。
TextEdit textEdit = getControl(KEY_AUTOTEXT1); textEdit.setView(getView());
也可以从容器控件中,取出全部子控件,丢给view,让view去完成设置:
Container myFldPanel = this.getView().getControl(KEY_MYFIELDCONTAINER); getView().createControlIndex(myFldPanel.getItems());
推荐阅读