研究rails也有一段时间了,最近使用其开发一个简单的报名系统,其中遇到了一些技术上面的问题.
整个页面分成两个部分:
1.已有条目的显示(格式如下)
[quote]
题目详细信息----------------------------------删除(使用的AJAX技术动态页面删除)
.........................................................................
[/quote]
2.一个表单
[quote]
用于增加条目信息的
其中含有一个基本text字段(希望通过ajax技术验证)
和submit
[/quote]
提交过程是:
如果提交则在服务器端验证输入字段如果为空,则在text后面显示一条红字提示错误,如果提交正确则在上面的条目列表中增加一个条目.
我的思路是通过
[code="ruby"]
<%= form_remote_tag :url =>{:controller=>"enroll_info/edit_score",:action=>:add_score},
:complete => "eval(request.responseText)"
%>
信息:"12" -%>*提示错误
[/code]
在服务端根据输入信息进行判断然后回发一些javascript代码.
如果正确:
[code="ruby"]
new Insertion.Bottom('items',<%=render :partial=>'item' %>);
Element.hide('markerror');
[/code]
[code="ruby"]
#item:
[/code]
如果错误:
[code="ruby"]
new Element.show('markerror');
[/code]
现在的问题是在调用Insertion.Bottom('items',<%=render :partial=>'item' %>);时里面又有javascript代码,导致无法实现.
是否我的思路有问题,或者有一些转码方法?
1.首先是增加条目的代码:
[code="java"]<%= form_remote_tag :url =>{:controller=>"enroll_info/edit_score",:action=>:add_score}%> [/code]因为采用ajax的话,传回的JS会自己执行不需要eval
2.另外在服务器端使用RJS:
如果成功:
page.insert_html :bottom,'items',:partial => 'item',:object => @item
page['markerror'].hide();
如果失败:
page['markerror'].show();
3.另外,RJS是可以直接写在控制器里的,如果像比较简单的rjs代码,就可以直写在控制器里,如果很复杂,就必须写在add_score.js.rjs文件里了
像楼主的这个控制就可以这样写:
respond_to do |format|
format.js do
if @item.save
render :update do |page|
page.insert_html :bottom,'items',:partial => 'item',:object => @item
page['markerror'].hide()
end
else
render :update do |page|
page['markerror'].show();
end
end
end
end