我正在尝试用一个相当简单的应用程序编写 rails3/ujs。
我想要的是要执行的javascript。我得到的是在新操作上执行的 js 或 html 代码,但在编辑操作的页面上显示。
编辑由以下触发
<%= link_to image_tag("tx.png"), edit_publication_path(p,:format=>:js),
:remote=>true -%>
变成
<a data-remote="true" href="/publications/154/edit.js">...</a>
一个新的被触发
<%= form_tag new_publication_path, :remote=>true, :method=>:get, :class=>:Button do %>
<%= submit_tag "Add New Publication" %>
<%= select "publication", :type, %w(Journal Report Technical Conference Keynote Chapter Book), {:include_blank => false},:class=>'dropdown' %>
<% end %>
变成
<form method="get" data-remote="true" action="/publications/new" accept-charset="UTF-8" >
<input type="submit" value="Add New Publication" name="commit">
<select name="publication[type]" id="publication_type">
<option value="Journal">Journal</option>...<option value="Book">Book</option>
</select>
</form>
控制器同时处理新操作和编辑操作,因此:
def edit
get_all_tags
@object = params[:id].blank?? params[:publication][:type].constantize.new() : Publication.find(params[:id])
respond_to do |format|
format.js # edit.js.erb
end
end
如果我触发“新”操作,则执行 javascript,并且视图显示为空字段,可以填充。
如果我触发“编辑”操作,则 javascript 和 html 将显示在屏幕上。
有问题的js(edit.js.erb):
$("div#editDialog").dialog('open').
html('<%= render(:layout=>"layouts/edit.html",:template=>"shared/edit.html")%>');
显示为
$("div#editDialog").dialog('open').html('<div class="content edit_page ui-widget"><form accept-charset="UTF-8" ... etc
我也可以 escape_javascript 然后显示的渲染语句
$("div#editDialog").dialog('open').html('<div class=\"content edit_page ui-widget\">\n...etc
所以仍然没有执行javascript。比较这两个操作的日志会显示所有相同的视图正在呈现。
我在这里错过了什么?(我希望通过把它全部写出来,解决方案会为我弹出,但到目前为止还没有。)