亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

完成了AJAX樹附原理分析

2024-09-01 08:31:40
字體:
來源:轉載
供稿:網友
周五完成了計劃中的RAILS框架中實現的AJAX樹目錄,今天才有空記錄一下。

首先要糾正一個上篇博文《Rails中的Ajax初體驗》中的一個錯誤:上篇博文中,我說“要在Rails中使用Ajax,局部模板是必須的”,經實踐檢驗,是錯誤的,特此更正。實踐是檢驗真理的唯一標準,此言不虛。經過項目中真正通過RJS實現AJAX樹,可知,通過使用insert_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的insert_html輔助方法,無法在一個table最后添加一行(即<tr>),即使寫一個簡單的測試程序也不行。最后,我是用div和span做容器,向其中添加table來解決的,即樹的每個節點都用一個只有一行的table來裝載。

問題二:在使用RJS時,在“render :update”代碼段,只能是單純的一句調用輔助方法的語句,其它的,無論是加點if判斷,還是再使用另外一個輔助方法,代碼全都失效。本想先用insert_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配合使用效果才好,否則容易錯位?;蛘呤孪扔脀indows的畫圖工具做一個白色小方塊的bmp文件(方塊大小根據已有的在樹的節點前面表示展開、收攏節點的圖片設定),然后在td中嵌入這個小方塊圖片也行。如某個二級節點,其html代碼段為:<table><tr><td> </td><td>二級節點</td></tr></table>。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品一本久久男人的天堂| 欧美激情第一页xxx| 成人网欧美在线视频| 欧美大片在线影院| 久久精品中文字幕电影| 日韩在线中文视频| www高清在线视频日韩欧美| 川上优av一区二区线观看| 日韩av电影手机在线| 91精品视频观看| 精品久久国产精品| 成人在线激情视频| 国产亚洲精品91在线| 伦理中文字幕亚洲| 自拍偷拍亚洲精品| 欧美在线视频免费播放| 国产精品日韩在线一区| 久久成人免费视频| 97国产精品人人爽人人做| 97在线视频免费观看| 中文字幕日韩av电影| 免费不卡欧美自拍视频| 日韩欧美中文字幕在线观看| 国产精品99久久久久久人| 欧美激情亚洲视频| 亚洲日本成人女熟在线观看| 欧美高清在线视频观看不卡| 精品亚洲精品福利线在观看| 亚洲免费视频观看| 欧美成人一区二区三区电影| 久久夜精品香蕉| 欧美精品videosex牲欧美| 成人黄色在线免费| 欧美日韩中文在线观看| 日韩国产精品视频| 欧美成年人网站| 91沈先生在线观看| 91亚洲国产精品| 97久久超碰福利国产精品…| 欧美精品福利在线| 欧美极品欧美精品欧美视频| 国产精品香蕉av| 亚洲精品97久久| 久久久久久久久综合| 久久亚洲私人国产精品va| 性色av一区二区咪爱| 色综合色综合久久综合频道88| 欧美精品手机在线| 国产精品欧美在线| 欧美日本国产在线| 国自在线精品视频| 欧美黑人性猛交| 91精品国产高清自在线看超| 丝袜亚洲欧美日韩综合| 亚洲精品www久久久| 亚洲va欧美va国产综合剧情| 久久精品91久久香蕉加勒比| 国产精品久久久久国产a级| 影音先锋欧美在线资源| 日韩经典第一页| 欧美成人精品h版在线观看| 久久精视频免费在线久久完整在线看| 国语自产精品视频在免费| 韩日欧美一区二区| 国产精品扒开腿爽爽爽视频| 精品中文字幕久久久久久| 国产91网红主播在线观看| 好吊成人免视频| 夜夜狂射影院欧美极品| www.欧美三级电影.com| 7m第一福利500精品视频| 色狠狠av一区二区三区香蕉蜜桃| 91地址最新发布| 国产精品午夜一区二区欲梦| 成人黄色av免费在线观看| 欧美特黄级在线| 国产精品黄页免费高清在线观看| 日韩在线视频线视频免费网站| 亚洲精品视频免费在线观看| 亚洲国产精品人人爽夜夜爽| 九九热这里只有在线精品视| 欧美性猛交xxxx免费看| 欧美国产第二页| 黄色成人在线播放| 欧美亚洲视频在线看网址| 北条麻妃久久精品| 色噜噜狠狠色综合网图区| 欧美激情啊啊啊| 国自产精品手机在线观看视频| 日韩av免费在线看| 欧洲成人在线观看| 78色国产精品| 日韩精品中文在线观看| 欧美日韩加勒比精品一区| 色噜噜狠狠狠综合曰曰曰| 亚洲国产精品电影在线观看| 一区二区三区精品99久久| 最近2019中文免费高清视频观看www99| 日韩精品一区二区三区第95| 国产区精品在线观看| 欧美另类极品videosbest最新版本| 最好看的2019的中文字幕视频| 欧美性猛交xxxx免费看久久久| 久久久国产视频91| 久久久国产精品x99av| 国产精品一区二区女厕厕| 亚洲欧美在线免费| 久久亚洲精品中文字幕冲田杏梨| 亚洲综合在线中文字幕| 国产福利精品av综合导导航| 亚洲人成网站色ww在线| 久久激情视频免费观看| xvideos成人免费中文版| 日韩国产欧美区| 亚洲一区二区黄| 在线观看国产精品91| 国产mv久久久| 日韩不卡中文字幕| 欧美激情综合亚洲一二区| 中文字幕自拍vr一区二区三区| 国产精品在线看| 欧美日韩亚洲精品一区二区三区| 欧美亚洲在线视频| 欧美激情videoshd| 精品一区二区电影| 亚洲人成毛片在线播放| 日韩中文字幕久久| 精品人伦一区二区三区蜜桃免费| 国产精自产拍久久久久久| 欧美视频精品一区| 在线观看欧美www| 69久久夜色精品国产69| 国语自产在线不卡| 国产精品视频一区二区三区四| 久久99精品久久久久久琪琪| 亚洲欧美中文日韩v在线观看| 国产精品美女无圣光视频| 国产精品男女猛烈高潮激情| 欧美精品一二区| 在线播放日韩精品| 欧美色图在线视频| 成人久久久久爱| 亚洲一区二区自拍| 国产精品亚洲激情| 日韩国产欧美精品一区二区三区| 欧美成人精品激情在线观看| 亚洲国产一区二区三区在线观看| 久久精品这里热有精品| 在线观看久久久久久| 国产精品专区第二| 欧美黑人巨大xxx极品| 亚洲欧美另类在线观看| 日韩成人在线视频网站| 亚洲va欧美va国产综合剧情| 亚洲成人网久久久| 91精品中文在线| 久久精视频免费在线久久完整在线看| 久久影院资源站| 亚洲人成毛片在线播放| 久久国产精品影视| 欧美日韩国产综合视频在线观看中文| 日韩高清av一区二区三区| 精品国产一区av| 中文字幕日本欧美|