<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    HTML模型增強

    Posted on 2009-05-30 00:44 canonical 閱讀(2713) 評論(2)  編輯  收藏 所屬分類: Witrix開發(fā)平臺
      html最早的設(shè)計目標(biāo)只是作為某種多媒體文檔展現(xiàn)技術(shù),其設(shè)計者顯然無法預(yù)料到今天Web應(yīng)用的蓬勃發(fā)展,一些設(shè)計缺陷也就難以避免。特別是html規(guī)范中缺乏對于復(fù)雜交互式組件模型的支持,直接導(dǎo)致企業(yè)應(yīng)用的前臺開發(fā)困難重重。AJAX技術(shù)可以看作是對這種困境的一種改良性響應(yīng),它試圖通過javascript語言在應(yīng)用層創(chuàng)建并維護一系列復(fù)雜的交互機制。很多完善的ajax框架走得相當(dāng)遙遠(yuǎn),最終基本將html作為一種底層“匯編”語言來使用。例如,一個很整齊美觀的類Excel表格可能是由一個個div拼接而成,與html原生的table元素已經(jīng)沒有任何關(guān)系。
     
       Witrix平臺中對于前臺html模型也作了一定的增強,但基本的設(shè)計思想是盡量利用原生控件,并盡量保持原生控件內(nèi)在的數(shù)據(jù)關(guān)系,而不是重新構(gòu)建一個完整的底層支撐環(huán)境。采用這種設(shè)計的原因大致有如下幾點:
    1. 前臺技術(shù)目前競爭非常激烈,我們優(yōu)先選擇的方式是集成第三方組件,盡量保持原生環(huán)境有利于降低集成成本。
    2. 通過javascript構(gòu)造的控件可能存在性能瓶頸和其他瀏覽器內(nèi)在的限制。例如一般Ajax框架提供的Grid控件都無法支撐大量單元格的顯示。
    3. Witrix平臺的tpl模板技術(shù)可以非常方便的生成html文本,并提供強大的控件抽象能力,因此在前臺動態(tài)創(chuàng)建并組織界面元素在Witrix平臺中是一種不經(jīng)濟的做法。
    4. Witrix平臺提供的分解機制非常細(xì)致,存儲于不同地方的不同來源的代碼會在不同的時刻織入到最終的頁面中,基于原生環(huán)境有利于降低平臺快速演進過程中的設(shè)計風(fēng)險。

       Witrix平臺中對于html模型的增強主要關(guān)注于以最少的代碼實現(xiàn)界面控件與業(yè)務(wù)邏輯的自然結(jié)合。基本結(jié)構(gòu)包括:
    1. 通過ControlManager對象在前臺建立一種container結(jié)構(gòu),統(tǒng)一管理控件的注冊和獲取。js.makeControl(elmOrId)返回特殊注冊的控件對象或者根據(jù)原生html元素生成一個包裝對象。
    2. 通過js.getWxValue(elm)和js.setWxValue(elm,value)這兩個函數(shù)統(tǒng)一對控件的值的存取過程。
    3. 通過js.regListener(elm,listenerFunc)統(tǒng)一管理控件之間的相關(guān)觸發(fā),實現(xiàn)控件之間的相互監(jiān)聽。當(dāng)js.setWxValue(elm,value)被調(diào)用時,注冊在ControlManager中的listenerFunc將被調(diào)用。
    4. stdPage.setFieldValue(fieldName,value)和stdPage.getFieldValue(fieldName,value)統(tǒng)一針對業(yè)務(wù)字段的值的存取過程,這里fieldName對應(yīng)于實體上的業(yè)務(wù)字段名。
    5. 通過ajax.addForm(frmId)等函數(shù)統(tǒng)一前臺提交參數(shù)的提取過程,通過stdPage.buildAjax()等函數(shù)統(tǒng)一后臺服務(wù)的調(diào)用方式。
    6. 通過stdPage對象統(tǒng)一封裝業(yè)務(wù)場景中的"常識"。
    基于以上一些基礎(chǔ)機制,Witrix平臺即可提供一些復(fù)雜的業(yè)務(wù)組件封裝。例如<input name="productCode" onkeypress="stdPage.keyPressToLoadRefByCode({objectName:'SomeProduct',queryField:'productCode'})" .../>通過簡單的調(diào)用一個js函數(shù)即可實現(xiàn)如下功能:
    a. 在文本框中輸入回車的時候自動提交到后臺查找對應(yīng)產(chǎn)品代碼的產(chǎn)品,并更新前臺多個相關(guān)字段的值
    b. 如果沒有查找到相應(yīng)產(chǎn)品,則彈出對話框根據(jù)界面上已有的部分字段信息提示客戶添加新的產(chǎn)品信息。
    c. 如果找到多個對應(yīng)產(chǎn)品,則彈出列表允許客戶選擇其一。
    d. 具體的處理過程可以通過函數(shù)參數(shù)進行精細(xì)的控制。
    在meta文件中,結(jié)合上下文環(huán)境中的元數(shù)據(jù)信息,我們在缺省情況下可以直接使用 <ds:LoadRefByCodeInputor objectName="SomeProduct" />標(biāo)簽,不需要任何其他附加參數(shù)。

       Witrix平臺中一般利用原生控件來保存數(shù)據(jù)值,而不是將數(shù)據(jù)保存在分離的js對象中。例如對于一個選擇控件,經(jīng)常要求選擇得到的是實體的id,而顯示在界面上的是某個其他字段的值。Witrix平臺中一般的實現(xiàn)結(jié)構(gòu)是
       <input type="hidden" name="${fieldName}" value="${entity[dsMeta.idField]}" id="${id}" textId="text_${id}" />
       <input type="text" value="${entity[dsMeta.nameField]}" id="text_${id}" />
    通過textId等擴展屬性即可明確定義控件多個部分之間的關(guān)聯(lián)關(guān)系,同時保證控件的實現(xiàn)完全與html規(guī)范相兼容。
       Witrix平臺中目前使用的"標(biāo)準(zhǔn)化"的擴展屬性有textId(對應(yīng)文本顯示控件的id), showName(某些無文字顯示的選擇控件需要保留顯示字段值), op(字段作為查詢條件提交時的比較算符),validator(字段值對應(yīng)的檢驗函數(shù)),setWxValue/getWxValue(重定義控件值的存取行為),serializer(特殊處理前臺控件的提交參數(shù))等。擴展屬性不僅可以引入說明信息,還可以引入豐富的控件行為。
      


    Feedback

    # re: HTML模型增強  回復(fù)  更多評論   

    2009-05-31 09:13 by 無量字幕
    不錯。。

    # re: HTML模型增強  回復(fù)  更多評論   

    2009-05-31 09:13 by 樂蜂
    支持下博主
    主站蜘蛛池模板: 91大神免费观看| 毛片免费全部免费观看| 亚洲成A∨人片在线观看无码| 一二三四免费观看在线电影| 国产亚洲精品美女久久久久久下载| 国产亚洲精品a在线无码| 91免费国产在线观看| 污网站免费在线观看| 亚洲欧洲日产国产综合网| 国产伦精品一区二区三区免费下载 | 亚洲国产精品久久丫| 又大又黄又粗又爽的免费视频| 久久精品中文字幕免费| 亚洲高清一区二区三区电影| 亚洲AV成人精品网站在线播放| 午夜免费福利在线观看| 亚洲免费在线播放| 免费人成再在线观看网站 | 亚洲日韩国产一区二区三区| 久久国产免费福利永久| 高清永久免费观看| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲色图国产精品| 久久精品亚洲福利| 天天拍拍天天爽免费视频| 一级毛片成人免费看免费不卡| 杨幂最新免费特级毛片| 中文字幕亚洲精品无码| 亚洲伊人tv综合网色| 黑人大战亚洲人精品一区| 日韩a在线观看免费观看| 69xx免费观看视频| 国产精品免费AV片在线观看| 一级毛片在线免费视频| 色欲色欲天天天www亚洲伊| 亚洲乱码一二三四五六区| 亚洲五月六月丁香激情| 在线观看亚洲成人| ZZIJZZIJ亚洲日本少妇JIZJIZ| 国产成人免费片在线视频观看| 四虎永久在线精品免费网址 |