W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Javascript Controller是一種新的代碼管理方式??赡苣呀?jīng)發(fā)現(xiàn)了,要看懂一個(gè)view.xml文件中究竟定義了哪些事件聲明是一件十分麻煩的事情,你必須不斷的點(diǎn)擊各個(gè)控件去查看各個(gè)事件下的代碼。這種零散的代碼組織形式給視圖的維護(hù)帶來(lái)了很多不便。 Javascript Controller的做法是把所有的事件代碼集中到一個(gè)和view.xml同名同位置的js文件中,同時(shí)利用Javascript中的"Annotation"來(lái)完成事件的掛接。見(jiàn)下例:
/** @Bind #buttonOK.onClick */
function buttonOK() {
alert("buttonOK Clicked.");
}
/** @Bind #dsPeople.onReady */
function dsPeopleReady(dsPeople) {
dsPeople.insert();
}
@Bind后面的表達(dá)式與View.get()方法中的表達(dá)式高度相似,所以我們也可以利用這種"Annotation"批量的為一組控件定義事件:
/** @Bind ^readOnlyEditor.onCreate */
function setReadOnly(self) {
self.set("readOnly", true);
}
并不是只有與View同名的js文件可以成為Javascript Controller,所有通過(guò)View的javaScriptFile屬性裝載的js文件都支持這種聲明。 另外,在Dorado中View附帶的js和css文件都將可以支持EL表達(dá)式,例如:
/** @Bind view.onReady */
function onReady(self) {
alert("${request.getRequestURI()}");
}
很多時(shí)候我們可能會(huì)覺(jué)得為每一個(gè)事件監(jiān)聽(tīng)器命名是一件費(fèi)心又麻煩的事情。而且,在大部分情況下這個(gè)方法的名稱是沒(méi)有任何實(shí)際作用的。出于這種考慮,Javascript Controller提供了對(duì)匿名事件監(jiān)聽(tīng)器特別支持,上面的幾個(gè)綁定的示例,我們都可以簡(jiǎn)化成下面的形式:
/** @Bind #buttonOK.onClick */
!function() {
alert("buttonOK Clicked.");
}
/** @Bind ^readOnlyEditor.onCreate */
!function(self) {
self.set("readOnly", true);
}
/** @Bind view.onReady */
!function() {
alert("${request.getRequestURI()}");
}
有些時(shí)候,我們可能會(huì)在Javascript Controller文件中定義一些公用的方法。例如:
function showMessage(text) {
dorado.MessageBox.alert(text);
}
/** @Bind #buttonOK.onClick */
!function() {
showMessage("buttonOK Clicked.");
}
這看起來(lái)很簡(jiǎn)單,但是我們能否在view.xml里的某個(gè)事件聲明中使用showMessage()呢?答案是可以,不過(guò)你必須要在showMessage()上添加額外的標(biāo)注。 默認(rèn)情況下Javascript Controller中的所有方法都是私有的,外部不可見(jiàn)的。同時(shí)Dorado提供了兩個(gè)"Annotation"用于聲明方法的可見(jiàn)性——@View和@Global。@View用于標(biāo)注某個(gè)方法在View中可見(jiàn),@Global用于標(biāo)注某個(gè)方法全局可見(jiàn)。例如:
/** @View */
function showMessage(text) {
dorado.MessageBox.alert(text);
}
此時(shí)showMessage()已被注冊(cè)成了當(dāng)前View對(duì)象的一個(gè)方法,我們可以在其他地方(包括view.xml中或其他js文件中)通過(guò) view.showMessage() 來(lái)調(diào)用它了。 @Global的作用的是把方法標(biāo)注成全局方法,我們可以在其他地方直接通過(guò) showMessage() 來(lái)調(diào)用它。不過(guò)由于Dorado支持在單頁(yè)面中出現(xiàn)多個(gè)View實(shí)例,為了避免可能出現(xiàn)的方法被相互覆蓋的風(fēng)險(xiǎn),我們強(qiáng)烈推薦首先考慮使用@View,@View可以在幾乎所有場(chǎng)景下替代@Global。
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)系方式:
更多建議: