DataType

2024-03-07 18:38 更新

上面我們介紹了DataType可以用于描述實(shí)體數(shù)據(jù),就像是數(shù)據(jù)字典。事實(shí)上,DataType不僅僅可以用來描述實(shí)體數(shù)據(jù),DataType用于為Dorado描述所有數(shù)據(jù)。幾種DataType的繼承關(guān)系圖如下(用于描述實(shí)體數(shù)據(jù)的其實(shí)只是最為常用的EntityDataType):

簡單的DataType

最上面的DataType用于那些簡單的數(shù)據(jù)類型,例如String、int、boolean等。Dorado中默認(rèn)已經(jīng)對下列的數(shù)據(jù)類型創(chuàng)建了相應(yīng)的DataType。 上述這些DataType都已被預(yù)先的注冊到了系統(tǒng)當(dāng)中,只需要直接利用名稱引用就可以了。例如下面的代碼指定了某文本編輯框?qū)?yīng)的數(shù)據(jù)類型是float。這樣,用戶將無法在該編輯框中輸入非浮點(diǎn)數(shù)的內(nèi)容。

new Dorado.widget.TextEditor({ dataType: "float" });

EntityDataType

EntityDataType是專門用于描述那些實(shí)體數(shù)據(jù)的類型。實(shí)體數(shù)據(jù)類型特指那些包含一到多個(gè)子屬性的數(shù)據(jù)類型,在JavaScript中實(shí)體數(shù)據(jù)都是以JSON對象的形式存在的。為了描述實(shí)體數(shù)據(jù)類型中的每一個(gè)屬性,Dorado提供了專用的屬性描述對象——Dorado.PropertyDef。每一個(gè)PropertyDef中都包含數(shù)據(jù)類型、校驗(yàn)規(guī)則、顯示格式、是否只讀等一系列的屬性。

var dataTypePhone = new Dorado.EntityDataType({
    name: "Phone",
    PropertyDefs: [
        { name: "product", label: "型號", required: true },
        { name: "manufacturer", label: "生產(chǎn)商" },
        { name: "type", label: "機(jī)型",
            mapValues: [
                { key: "A", value: "直板" },
                { key: "B", value: "翻蓋" },
                { key: "C", value: "滑蓋" },
                { key: "D", value: "旋蓋" },
                { key: "Z", value: "其它" }
            ]
        },
        { name: "price", label: "價(jià)格", dataType: "float", displayFormat: "¥#,##0.00" },
        { name: "length", label: "長", dataType: "float", displayFormat: "0.0mm" },
        { name: "width", label: "寬", dataType: "float", displayFormat: "0.0mm" },
        { name: "height", label: "高", dataType: "float", displayFormat: "0.0mm" },
        { name: "screen", label: "屏幕", dataType: "float", displayFormat: "0.0\"" },
        { name: "touchScreen", label: "觸摸屏", dataType: "boolean" },
        { name: "cpu", label: "CPU" },
        { name: "os", label: "操作系統(tǒng)" },
        { name: "comment", label: "備注" }
    ]
});
$dataTypeRepository.register(dataTypePhone);

上面的代碼定義了一個(gè)包含了若干屬性信息的DataType。利用此DataType制作出的頁面可見Dorado 7 Client Edition提供的dataset.html例子。其界面效果大致如下: 實(shí)際開發(fā)時(shí),大部分場景下我們都是通過Dorado的IDE定義DataType: 由IDE的屬性標(biāo)簽定義DataType的具體屬性設(shè)置,如下是一個(gè)PropertyDef的屬性設(shè)置:

AggregationDataType

AggregationDataType用于描述集合類數(shù)據(jù)。

全局DataType

dorado中可以通過model.xml定義全局的DataType,各個(gè)頁面中就可以直接使用,例如在model.xml中我們定義: 之后在我們的視圖文件中,相關(guān)控件如果有dataType屬性,我們就可以直接使用它: 當(dāng)然IDE設(shè)計(jì)器也提供了設(shè)置支持,在你打開dataType屬性對話框的時(shí)候,可以看到選擇列表中有一個(gè)Models屬性列表,里面就包含了你定義的全局的DataType屬性:

私有DataType

全局的DataType方便我們重用設(shè)置,但是如果在不同的頁面有不同個(gè)性化設(shè)置要求,例如同樣是category對象的id,有的頁面我們希望顯示名稱為"ID",有的頁面我們希望顯示名稱為"類型編號",諸如此類的個(gè)性化需求,我們都可以直接在Dorado的View中的DataType中設(shè)置解決。 首先我們要在View的Model節(jié)點(diǎn)添加一個(gè)私有的dataType并且設(shè)置它的parent屬性為對應(yīng)的全局的DataType: 設(shè)置parent屬性時(shí),IDE會提供向?qū)гO(shè)置窗口: 找到全局Models中的對應(yīng)的DataType并添加上就可以。 接下來我們只要在這個(gè)私有的DataType添加一些個(gè)性化的設(shè)置就可以,例如本例只要添加一個(gè)id屬性,并設(shè)置它的label為"類型編號",其它都不用設(shè)置,它會直接從全局的DataType中繼承下來。 在很多場景下,如果你只想定義一個(gè)給當(dāng)前頁面使用的DataType,而不需要把它設(shè)置為公用的DataType,那么你就可以不用在全局的DataType的model.xml文件中定義,在View的當(dāng)前Models節(jié)點(diǎn)下定義DataType就可以了,并通過creatingType屬性和對應(yīng)的POJO建立映射關(guān)系

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號