中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Rails中的Ajax初體驗分析

      時間:2024-08-19 23:12:30 AJAX 我要投稿
      • 相關推薦

      Rails中的Ajax初體驗分析

        首先要糾正一個上篇博文《Rails中的Ajax初體驗》中的一個錯誤:上篇博文中,我說“要在Rails中使用Ajax,局部模板是必須的”,經實踐檢驗,是錯誤的,特此更正。實踐是檢驗真理的唯一標準,此言不虛。經過項目中真正通過RJS實現AJAX樹,可知,通過使用_html、replace_html等輔助方法,可直接操作頁面上的元素,無須使用局部模板。

        整個的實現過程還是有點曲折:

        之前使用的生成樹結構的頁面,是利用從服務器獲取的所有數據,通過一系列javascript腳本函數,一次性地生成整個樹結構目錄。這種方式對付系統的功能菜單還游刃有余,但是要生成包含上千條數據的樹結構時,客戶端的瀏覽器需要十幾秒鐘才能把整個樹結構建立起來、顯示在頁面上,這對于用戶來說是不可忍受的——其實對于我們開發者來說,也是不可忍受的。那么一個可行的辦法就是,利用AJAX技術,先顯示樹結構的第一級節點,當點擊某個節點時,再從服務器獲取該節點的子節點,顯示出來。這樣,每次與服務器交互的數據量不大,加快了頁面響應。

        一開始我打算利用RAILS中的AJAX機制,配合使用之前那個版本中的javascript函數。但是那個版本的思路,是基于從服務器獲取的樹結構數據,通過循環、遞歸,在服務器端生成好要在客戶端頁面執行的一系列javascript函數調用,以生成樹結構。至此,還算是比較符合AJAX的思路,但是下一步就大相徑庭了:舊版本的是將生成的那一大串javascript函數調用的字符串,一次性地完全返回給客戶端頁面,客戶端頁面在加載前,已經獲得了這一大串字符串,只需簡單地把它加載,就一次性的執行它、生成樹結構了。這種方式,等于沒有給AJAX留下插足的任何機會。

        此路不通,于是我轉而尋找網上別人做的AJAX樹,試圖將其移植過來,為我所用。之前就找到過一個.NET版的,用C#寫的,還沒仔細看過。于是打開VS2005,建好了ASPX工程,研究了一下這個.NET版的AJAX樹。這個版本自帶了一個ACCESS數據庫,里面有一些演示數據。把IIS架起來后,運行得還真挺順暢。這個AJAX樹的功能做得還挺強,可以實現在頁面上對樹節點的添加、刪除、編輯、拖拽移動操作。代碼也比較清晰:一個htm頁面和一個aspx頁面,其中aspx頁面中定義了一些服務器端函數,組織出相應的要返回給htm頁面的html代碼段。然而,要把這個移植過來也不容易,首先是對其生成html代碼段的思路不熟悉,不好控制,另外一點,它是通過response.write返回所生成的html代碼段,與RJS中直接指定頁面元素進行控制的思路又不一樣。

        也是由于通過對以上兩種方式的探索,使得我對做AJAX樹的思路更加清晰的原因吧,我最終決定還是自己動手,完全自己做一個RAILS下的出來吧。盡管最終從核心內容到細節控制,總算是把這棵樹給搗騰出來了,但中間遇到幾個問題,有的不知道是否RAILS本身就不支持,還有的明明書上、別人都行得通,但我這就是不行。不知個中緣由,列在這里,若有人能夠解答,還望不吝賜教!謝過先!

        問題一:用RJS的_html輔助方法,無法在一個table最后添加一行(即

        ),即使寫一個簡單的測試程序也不行。最后,我是用div和span做容器,向其中添加table來解決的,即樹的每個節點都用一個只有一行的table來裝載。


        問題二:在使用RJS時,在“render :update”代碼段,只能是單純的一句調用輔助方法的語句,其它的,無論是加點if判斷,還是再使用另外一個輔助方法,代碼全都失效。本想先用_html添加元素,再用call調用javascript函數之類,完全行不通,最終是預先在要插入元素的地方放置一個空的容器,然后換用replace_html,將容器中的空內容“換”成返回的html代碼段,也達到了添加頁面元素的效果。

        問題三:這個是最為奇怪的問題了。當我組合待返回的html元素的代碼時,由于該元素還要繼續帶有AJAX鏈接,故本想用“#{}”將Ruby代碼嵌入——這種方法理論上講是可行的,可我在實際操作中,記得好像只成功了一兩次,基本上都實現不了AJAX效果(實際上是沒效果)。無奈之下,我根據頁面初始顯示的第一級樹節點,查看了頁面代碼,看到了生成的AJAX代碼,再依照它的樣子,替換掉我本來想用Ruby代碼的部分——也就是說,我最終不是用嵌入的Ruby代碼,而是直接寫出將要生成的AJAX代碼——這樣的代碼是多么的丑陋啊!

        不過,整個過程下來,還是略有一些可以總結的東西:

        總結一:由于樹節點中要顯示的文本中,有的會有加號“+”,而恰巧該文本還是要向服務器發送的參數,這種情況下,在組合要返回的html代碼段時,加號會被當作連接字符串的操作,那么在必要的地方,則把加號替換成其它不會被誤解的符號,如下劃線“_”,而在傳給數據庫做查詢用時,再替換回來。Ruby中將字符串中的模式替換成指定內容的函數是gsub,如:str.gsub("+","_"),就是把str中的加號替換成下劃線。該函數的第一個參數也可以是正則表達式。

        總結二:對于頁面上要顯示的每一個樹節點,都用一個只有一行的table來控制,這樣做有一個好處,就是每個節點都可以獨立地控制顯示位置,而不用考慮colspan屬性,只需在前面添加指定個數的td即可,具體做法見“總結三”。

        總結三(控制樹節點的顯示級別位置的方法):點擊樹節點,向服務器發送該節點的ID,從而獲取該節點的子節點。與此同時,還要返回一個本節點的級別(頁面初始顯示的第一級節點的級別為0)。在生成子節點的html代碼段時,得到父節點的級別,加上1,即為子節點的級別。根據級別數做循環,向包含子節點內容的table中添加相應個數的td。在所添加的td中,填入若干空格()(數量自定,一般2~3個為宜),但是空格只有與td配合使用效果才好,否則容易錯位。或者事先用windows的畫圖工具做一個白色小方塊的bmp文件(方塊大小根據已有的在樹的節點前面表示展開、收攏節點的圖片設定),然后在td中嵌入這個小方塊圖片也行。如某個二級節點,其html代碼段為:



      【Rails中的Ajax初體驗分析】相關文章:

      Ajax使用JSON數據格式案例分析01-10

      AJAX的工作原理及優缺點08-16

      使用ajax操作JavaScript對象的方法09-28

      關于Ajax技術原理的幾點總結01-10

      基于ajax實現無刷新分頁的方法10-15

      解析ajax請求post和get的區別10-01

      如何利用ajax獲取博文列表08-03

      微博營銷初體驗10-11

      淺談Ajax修改購物車的方法06-29

      企業中的經營管理分析07-31

      主站蜘蛛池模板: 粉嫩av一区二区在线观看| 国产精品性一区二区三区| 天堂av无码大芭蕉伊人av孕妇黑人 | 伊人色综合九久久天天蜜桃| 免费一区二区女优在线观看| 麻豆免费观看视频在线观看| 欧美精品v欧洲高清| 亚洲国产精品性色av| 从江县| 国产呦系列视频网站在线观看| 亚洲av乱码一区二区三区女同| 大屁股少妇一区二区无码 | 黑丝美女喷水在线观看| 新久久久高清黄色国产| 国产好片日本一区二区三区四区| 无码丰满熟妇浪潮一区二区av| 一区二区特别黄色大片| 99久久亚洲国产高清观看| 99熟妇人妻精品一区五一看片| 亚洲av中文aⅴ无码av不卡| 午夜无码国产18禁| 乌拉特前旗| 和林格尔县| 阜新市| 在线成人tv天堂中文字幕| 溆浦县| 商都县| 日本第一区二区三区视频| 人人妻人人澡av| 青青青伊人色综合久久亚洲综合| 靖宇县| 一二三四中文字幕日韩乱码| 亚洲无码毛片免费视频在线观看| 久久青草亚洲AV无码麻豆| 国产女主播免费在线观看| 成人国产精品免费网站| 高清高速无码一区二区| 亚洲九九夜夜| 亚洲无人区码一码二码三码区别| 久久亚洲aⅴ精品网站婷婷| 亚洲午夜亚洲精品国产成人|