问题一:用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配合使用效果才好,否则容易错位。或者事先用windows的画图工具做一个白色小方块的bmp文件(方块大小根据已有的在树的节点前面表示展开、收拢节点的图片设定),然后在td中嵌入这个小方块图片也行。如某个二级节点,其html代码段为:<table><tr><td> </td><td>二级节点</td></tr></table>。









