Dorado 5 : 2.监听器对象 (T1A)

在IDE环境下dataset提供了一个listener属性,用以指定该dataset的监听器。
listener主要作用是在dataset的生命周期内侦听dataset的一些AJAX动作,如初始化、数据加载和数据保存等。listener属性设定范例:

打开一个已经存在的视图模型,在相应的dataset上查看listener属性,在上图中,我们可以看到listener属性的值一般都是一个Listener类的全路径名,如上图的:ajax.EmployeeDatasetListener。另外listener属性可以同时设置多个listener对象,这样在开发的时候,我们也可以根据需要给Dataset添加多个Listener对象,他们同时侦听一个Dataset的AJAX动作。
Dataset的Listener属性设定机制,除了可以在IDE环境中指定之外,也允许我们通过Java编码指定,指定方法如下:

dataset.addListener(com.hr.EmployeeDatasetListener.class.newInstance());

在很多情况下我们可能并不需要通过dataset的addListener()方法添加listener,一般情况下我们都可以直接在视图模型界面中配置,如下图中的蓝色字体:

或者利用视图模型listener生成向导自动设定,如下图:

操作方法为:选中需要生成listener的dataset节点对象,找到它的listener属性,并单击,就会自动弹出listener创建向导窗口,该向导窗口工作结束之后会自动的将新建的listener类配置到dataset的listener属性中。
listener主要提供以下的几个方法,用以侦听dataset的内部事件:
void onInit(Dataset dataset):当Dataset被初始化的时候触发的事件.即当调用Dataset.init()时触发的事件。其中参数dataset就是被初始化的dataset对象;
boolean beforeCreateFields(Dataset dataset) : 当Dataset将要自动创建所有字段之前触发的事件.即当调用Dataset.createFields()之前触发的事件.
void afterCreateFields(Dataset dataset) :当Dataset执行完自动创建所有字段之后触发的事件.即当调用Dataset.createFields()之后触发的事件。
boolean beforeLoadData(Dataset dataset) :当Dataset将要装载数据之前触发的事件.即当调用Dataset.loadData()之前触发的事件.
void afterLoadData(Dataset dataset) : 当Dataset执行完装载数据之后触发的事件.即当调用Dataset.loadData()之后触发的事件.
boolean beforeUpdateData(Dataset dataset) :当Dataset将要装载数据之前触发的事件.即当调用Dataset.update()之前触发的事件.
void afterUpdateData(Dataset dataset) :当Dataset执行完装载数据之后触发的事件.即当调用Dataset.update()之后触发的事件。
其中所有before类型的事件都提供了一个boolean类型的返回值,在listener处理机制中,如果返回false就会使得dataset终止执行默认的动作,同样对应的after事件也不会得到执行。如dataset执行loadData()方法而导致listener的beforeLoadData()方法的执行,并且beforeLoadData()方法的返回值如果为false,则dataset的afterLoadData()方法也会因此终止。