Javascript Controller

2024-03-07 18:37 更新

Javascript Controller是一種新的代碼管理方式。可能您已經(jīng)發(fā)現(xiàn)了,要看懂一個view.xml文件中究竟定義了哪些事件聲明是一件十分麻煩的事情,你必須不斷的點擊各個控件去查看各個事件下的代碼。這種零散的代碼組織形式給視圖的維護(hù)帶來了很多不便。 Javascript Controller的做法是把所有的事件代碼集中到一個和view.xml同名同位置的js文件中,同時利用Javascript中的"Annotation"來完成事件的掛接。見下例:

/** @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,所有通過View的javaScriptFile屬性裝載的js文件都支持這種聲明。 另外,在Dorado中View附帶的js和css文件都將可以支持EL表達(dá)式,例如:

/** @Bind view.onReady */
function onReady(self) {
    alert("${request.getRequestURI()}");
}

匿名事件監(jiān)聽器

很多時候我們可能會覺得為每一個事件監(jiān)聽器命名是一件費心又麻煩的事情。而且,在大部分情況下這個方法的名稱是沒有任何實際作用的。出于這種考慮,Javascript Controller提供了對匿名事件監(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()}");
}

聲明式公用方法

有些時候,我們可能會在Javascript Controller文件中定義一些公用的方法。例如:

function showMessage(text) {
    dorado.MessageBox.alert(text);
}

  
/** @Bind #buttonOK.onClick */
!function() {
    showMessage("buttonOK Clicked.");
}

這看起來很簡單,但是我們能否在view.xml里的某個事件聲明中使用showMessage()呢?答案是可以,不過你必須要在showMessage()上添加額外的標(biāo)注。 默認(rèn)情況下Javascript Controller中的所有方法都是私有的,外部不可見的。同時Dorado提供了兩個"Annotation"用于聲明方法的可見性——@View和@Global。@View用于標(biāo)注某個方法在View中可見,@Global用于標(biāo)注某個方法全局可見。例如:

/** @View */
function showMessage(text) {
    dorado.MessageBox.alert(text);
}

此時showMessage()已被注冊成了當(dāng)前View對象的一個方法,我們可以在其他地方(包括view.xml中或其他js文件中)通過 view.showMessage() 來調(diào)用它了。 @Global的作用的是把方法標(biāo)注成全局方法,我們可以在其他地方直接通過 showMessage() 來調(diào)用它。不過由于Dorado支持在單頁面中出現(xiàn)多個View實例,為了避免可能出現(xiàn)的方法被相互覆蓋的風(fēng)險,我們強烈推薦首先考慮使用@View,@View可以在幾乎所有場景下替代@Global。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號