W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Dorado中的很多對(duì)象都支持個(gè)名為listener的屬性,我們可以在此屬性中定義一到多個(gè)的Listener用于監(jiān)聽(tīng)對(duì)象的初始化過(guò)程。目前支持此類監(jiān)聽(tīng)的對(duì)象包括: DataTypeDataProviderDataResolverViewConfigViewComponent(即所有的控件)可監(jiān)聽(tīng)的動(dòng)作包括: beforeInit 在對(duì)象將要被初始化之前觸發(fā),此時(shí)系統(tǒng)為尚未將XML中配置的信息初始化到對(duì)象中。onInit 在對(duì)象將被初始化之后觸發(fā),此時(shí)系統(tǒng)已將XML中配置的信息初始化到對(duì)象中。定義一個(gè)監(jiān)聽(tīng)器的方法與大多數(shù)自動(dòng)方法適配相仿,同時(shí)Dorado還在此處提供了自動(dòng)根據(jù)方法名確定監(jiān)聽(tīng)動(dòng)作的功能。具體的規(guī)則是如果您的方法名是以before開(kāi)頭的,那么Dorado會(huì)認(rèn)為你希望監(jiān)聽(tīng)beforeInit動(dòng)作,否則您的方法監(jiān)聽(tīng)到的將是onInit動(dòng)作。 例如下面的方式將可以監(jiān)聽(tīng)某按鈕的beforeInit動(dòng)作:
...
public void beforeInit(Button button) {
// your code
}
...
對(duì)于beforeInit的監(jiān)聽(tīng)器而言,我們還可以為監(jiān)聽(tīng)方法提供一個(gè)邏輯型的返回值,當(dāng)方法返回false時(shí),表示將要終止該對(duì)象的初始化動(dòng)作,其后的Listener也將被一同跳過(guò)。如果方法不支持返回值或者返回的不是邏輯型的false值則表示繼續(xù)執(zhí)行后續(xù)的初始化動(dòng)作。
全局對(duì)象監(jiān)聽(tīng)器可以批量的監(jiān)聽(tīng)上面列出的所有對(duì)象或其中的一部分對(duì)象。 全局對(duì)象監(jiān)聽(tīng)器不支持方法自動(dòng)適配,要定義一個(gè)全局對(duì)象監(jiān)聽(tīng)器必須繼承Dorado提供的com.bstek.dorado.data.listener.GenericObjectListener<T>類。 該類包含下列3個(gè)屬性: order - 監(jiān)聽(tīng)優(yōu)先級(jí),數(shù)字越小越先被觸發(fā),系統(tǒng)默認(rèn)的order是999。pattern - 要監(jiān)聽(tīng)的范圍,可使用通配符,不定義則表示全部攔截。excludePattern - 不監(jiān)聽(tīng)的范圍,可使用通配符。當(dāng)利用pattern和excludePattern來(lái)判定某對(duì)象是否可被監(jiān)聽(tīng)時(shí),系統(tǒng)首先觀察對(duì)象是否包含name屬性,如果有則使用name屬性的值來(lái)與pattern和excludePattern進(jìn)行比對(duì)。否則系統(tǒng)進(jìn)一步觀察對(duì)象是否包含id屬性,如果有則使用id屬性的值來(lái)與pattern和excludePattern進(jìn)行比對(duì)。 如此,對(duì)于DataType、ViewConfig、View而言系統(tǒng)將使用它們的name屬性來(lái)進(jìn)行判定,而對(duì)于Component(即所有的控件)而言則將使用它們的id屬性。
通過(guò)pattern和excludePattern并不是唯一的用來(lái)設(shè)定監(jiān)聽(tīng)范圍的方法,事實(shí)上比這更加常用的應(yīng)該是利用GenericObjectListener類的泛型。 例如下面的代碼因?yàn)橹付朔盒?,將確定該監(jiān)聽(tīng)器只能監(jiān)聽(tīng)系統(tǒng)中所有View的初始化動(dòng)作:
public class ViewListener extends GenericObjectListener<View> {
@Override
public boolean beforeInit(View view) throws Exception {
// your code
}
@Override
public void onInit(View view) throws Exception {
// your code
}
}
向系統(tǒng)中注冊(cè)一個(gè)全局對(duì)象監(jiān)聽(tīng)器的方法如下:
<bean parent="dorado.genericObjectListenerRegister">
<property name="listener">
<bean class="test.ViewListener" >
<property name="order" value="1" /> <!-- 攔截優(yōu)先級(jí) -->
<property name="pattern" value="*" /> <!-- 要攔截哪一類View -->
<property name="excludePattern" value="com.bstek.public.*" /> <!-- 不攔截哪一類View -->
</bean>
</property>
</bean>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: