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

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

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

    Burn Net--燒網

    玩的是電腦,別被電腦玩了。

    統計

    留言簿(2)

    積分與排名

    Dojo

    閱讀排行榜

    評論排行榜

    Dojo book第一章補充 I/O

    譯者序:
    Dojo book目前還在不斷更新和補充中,我會盡量跟上原著的腳步,給大家最新的信息。
    更新我會用隨筆寫出來,同時也會更新原文章。

    I/O

    dojo.io.blind介紹


    在我們制作dojo的時候,目的是讓用戶和開發者都能享受到DHTML程序。在很多朋友的支持下,特別是Aaron Boodman和Mark Anderson,我們已經找到了解決可用性的方法。我們提供了一個單獨的易用的API和一個包裝類,這個類只需要兩個文件。dojo.io包提供了對XMLHTTP和一些其他更復雜的傳輸結構的支持。

    在dojo.io包中我們一般最常使用的是dojo.io.bind()方法。dojo.io.blind()是一個標準的異步的請求API,它包含了各種傳輸層(transport layers),包括queues of iFrames,XMLHTTP,mod_pubsub,LivePage等等。Dojo會試圖為當前的請求選擇最合適的傳輸方法,因為在做網站時一般不會使用到其他傳輸,所以我們只用到XMLHTTP。dojo接受一個匿名的類,但是在知道這個類的屬性的情況下,把它作為方法參數(function argument)。下面的代碼是創建一個請求(request),這個請求會從URL返回原始的字符串。
    dojo.io.bind({
    ????url:?
    "http://foo.bar.com/sampleData.txt",
    ????load:?
    function(type,?data,?evt){?/*do?something?w/?the?data?*/?},
    ????mimetype:?
    "text/plain"
    });

    這就是全部,你提供了一個數據地址,還有一個當你得到返回值時要執行的function。但是如果在請求過程中出錯了怎么辦呢?我們再來創建一個register來解決:

    dojo.io.bind({
    ????url:?
    "http://foo.bar.com/sampleData.txt",
    ????load:?
    function(type,?data,?evt){?/*do?something?w/?the?data?*/?},
    ????error:?
    function(type,?error){?/*do?something?w/?the?error*/?},
    ????mimetype:?
    "text/plain"
    });

    同樣也可以只創建一個單獨的handler來解決:
    dojo.io.bind({
    ????url:?
    "http://foo.bar.com/sampleData.txt",
    ????handle:?
    function(type,?data,?evt){
    ????????
    if(type?==?"load"){
    ????????????
    //?do?something?with?the?data?object
    ????????}else?if(type?==?"error"){
    ????????????
    //?here,?"data"?is?our?error?object
    ????????????//?respond?to?the?error?here
    ????????}else{
    ????????????
    //?other?types?of?events?might?get?passed,?handle?them?here
    ????????}
    ????},
    ????mimetype:?
    "text/plain"
    });

    下面的代碼提交一段javascript程序段,然后讓服務器運行它,一般我們這么做是為了加速程序運行,注意mimetype:
    dojo.io.bind({
    ????url:?
    "http://foo.bar.com/sampleData.js",
    ????load:?
    function(type,?evaldObj){?/*?do?something?*/?},
    ????mimetype:?
    "text/javascript"
    });

    如果你想確保程序使用XMLHTTP,可以這樣寫:
    dojo.io.bind({
    ????url:?
    "http://foo.bar.com/sampleData.js",
    ????load:?
    function(type,?evaldObj){?/*?do?something?*/?},
    ????mimetype:?
    "text/plain",?//?get?plain?text,?don't?eval()
    ????transport:?"XMLHTTPTransport"
    });
    Being a jack-of-all-trades, bind() also supports the submission of forms via a request (with the single caveat that it won't do file upload over XMLHTTP):
    作為一個jack-of-all-trades(萬事通),bind()同樣支持來自于表單提交的數據。
    dojo.io.bind({
    ????url:?
    "http://foo.bar.com/processForm.cgi",
    ????load:?
    function(type,?evaldObj){?/*?do?something?*/?},
    ????formNode:?document.getElementById(
    "formToSubmit")
    });
    以上只是一些最基本的,其實這些可以不用全部由開發者自定義。

    RPC
    你可以看到,Dojo通過dojo.io.bind提供了簡單,強大的方法使用多種多樣的I/O functions。但是在開發過程中,程序員會調用很多很多I/O,這同時會給服務器和客戶端加重負擔。Dojo的RPC服務就是為了減少負擔,易用,精簡代碼而生的。

    RPC的全名是Remote Procedre Calls,或者Remote Method Invocation,(譯者:遠程method調用)。最基本的,RPC允許開發者調用在遠程服務器上的方法(method)。Dojo不僅提供了基本的RPC client包,而且還擴展了它,使它支持JSON-RPC服務和YAHOO服務。同時你也可以自己寫出相對于其他服務的類。

    我們假定有一個需要調用服務器端程序的小程序,假設要調用add(x,y)和subtract(x,y)。在沒有特殊情況的條件下,我們的客戶端會這樣寫:
    add?=?function(x,y)?{

    ????request?
    =?{x:?x,?y:?y};

    ????dojo.io.bind({
    ????????????url:?
    "add.php",
    ????????????load:?onAddResults,
    ????????????mimetype:?
    "text/plain",
    ????????content:?request
    ????});
    }

    subtract?
    =?function(x,y)?{

    ????request?
    =?{x:?x,?y:?y};
    ????
    ????dojo.io.bind({
    ????????????url:?
    "subract",
    ????????????load:?onSubtractResults,
    ????????????mimetype:?
    "text/plain"
    ????????content:?request
    ????});
    }


    你看,這不是很難。但是無論是我們讓服務器運行add和subtract還是讓客戶端自己計算,這只是一個非常簡單的程序。如果我們要調用在服務器上30個不同method會怎么樣呢?我猜我們可能要重復的寫幾乎一樣的代碼一遍又一遍,每次都要創建一個請求類(request object),設定URL,設定變量等等。這不僅容易出錯,而且還很枯燥。
    Dojo的RPC客戶端簡化了這個過程:

    {
    ????
    "serviceType":?"JSON-RPC",?
    ????
    "serviceURL":?"rpcProcessor.php",?
    ????
    "methods":[?
    ????????{
    ????????????
    "name":?"add",?
    ????????????
    "parameters":[
    ????????????????{
    "name":?"x"},
    ????????????????{
    "name":?"y"}????
    ????????????]
    ????????},
    ????????{
    ????????????
    "name":?"subtract",?
    ????????????
    "parameters":[
    ????????????????{
    "name":?"x"},
    ????????????????{
    "name":?"y"}????
    ????????????]
    ????????}

    ????]
    }

    以上就是對于服務器的定義。一旦定義創建完畢,其他的事情就簡單了,我們還可以創建一個類:
    var?myObject?=?new?dojo.rpc.JsonService?(defintion);
    要使用服務器的方法:
    myObject.add(3,5);

    我敢打賭你會在想“我不是只調用方法就夠了,我還有得到計算的結果。”你是對的,但這也是非常容易的。服務器端的myObject.add()會返回一個延緩類(deferred object)。Twisted Python用戶可能對延緩類(deferred object)很熟悉,延緩類(deferred object)允許開發者根據返回數據的類型附加一個或更多的回叫(callbacks)和錯誤處理(errbacks)。這里有一個簡單的例子:
    var?myDeferred?=?myObject.add(3,5);
    myDeferred.addCallback(myCallbackMethod);

    我們把mycallbackmethod作為回叫添加到我們的延緩類mydeferred。這時,8會被傳遞進mycallbackmethod。另一方面,我們也可以添加一個errback method來處理服務器返回的出錯信息。我們隨意添加回叫方法(callback),多少都可以,它們會按照我們定義的順序被調用。

    以上的例子都是圍繞dojo.rpc.JsonService展開的。我們還可以使用dojo.rpc.YahooService,規范和結構都是一樣的。這兩個類都是繼承了dojo.rpc.RpcService。要創建自己的類會在第二章中詳細介紹。(譯者:第二章原著還沒有完成)

    posted on 2006-06-27 16:56 Burn Net 閱讀(2475) 評論(7)  編輯  收藏 所屬分類: Dojo

    評論

    # re: Dojo book第一章補充 I/O 2006-06-27 21:21 winneryong

    沙發。。。辛苦了~  回復  更多評論   

    # re: Dojo book第一章補充 I/O 2006-07-04 16:38 smilingOx

    謝1  回復  更多評論   

    # re: Dojo book第一章補充 I/O 2006-07-26 17:28 NiShaoChun

    用過DWR感覺還是不錯的,后來又看了bindows感覺更好(不過就是商用的),看了你寫的dojo,期待后面的。  回復  更多評論   

    # re: Dojo book第一章補充 I/O 2006-09-27 12:43 oh_yes

    簡直是太不象話了, 翻譯的這么好,竟然不翻譯后面的了,我嚴正抗議,強烈要求趕快出后面的。  回復  更多評論   

    # re: Dojo book第一章補充 I/O 2006-10-30 16:04 bb

    這方面資料太少,勞你go next  回復  更多評論   

    # re: Dojo book第一章補充 I/O 2006-11-20 16:54 wwwtiger

    辛苦了,dojo確實不錯  回復  更多評論   

    # re: Dojo book第一章補充 I/O 2007-05-12 15:40 大屏幕系統方案網

    大屏幕系統方案網(www.saus.cn)提供專業的音視頻信號傳輸處理設備,大屏幕拼接技術方案咨詢,下載,包括:DLP、CRT、LED、LCD液晶、PDP等離子大屏幕拼接方案;相關大屏幕背投設備有:DLP單元、CRT單元;大屏幕信號處理設備VGA矩陣、RGB矩陣、AV視頻矩陣、長線驅動器和格式轉換器;大屏幕顯示設備包括:背投一體機、等離子拼接單元.廣泛應用于:DLP、CRT、液晶LCD、等離子PDP等大屏幕顯示系統中.  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲一级毛片视频| 亚洲经典在线观看| 日韩毛片在线免费观看| 97在线线免费观看视频在线观看| 亚洲丝袜美腿视频| 1000部羞羞禁止免费观看视频| 亚洲图片一区二区| 色片在线免费观看| 久久精品国产亚洲av麻豆蜜芽| 韩国免费一级成人毛片| 亚洲成a人片在线不卡| 毛片基地免费视频a| 色偷偷噜噜噜亚洲男人| 国产精品成人四虎免费视频| 最新亚洲人成网站在线观看| 亚洲国产精品尤物YW在线观看| fc2成年免费共享视频18| 亚洲精品少妇30p| 69影院毛片免费观看视频在线| 亚洲av产在线精品亚洲第一站| 免费看又爽又黄禁片视频1000| 亚洲国产AV无码一区二区三区| 全部免费毛片免费播放| 中国好声音第二季免费播放| 亚洲精品美女在线观看| 成人最新午夜免费视频| 一级女性全黄生活片免费看| 久久亚洲精品中文字幕无码| 国产精品久久久久免费a∨ | 四虎影视免费在线| 永久免费精品影视网站| 精品亚洲成AV人在线观看| 成年人在线免费观看| GOGOGO免费观看国语| 亚洲一区中文字幕在线观看| 亚洲国产成人精品女人久久久 | 亚洲美女视频一区二区三区| 妞干网免费视频在线观看| 国产精品免费视频观看拍拍| 亚洲国产精品免费在线观看| 免费在线黄色网址|