Rails3 UJS JavaScript / HTML отображается не выполнено - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь написать 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. Сравнение журналов для этих двух действий показывает, что все те же представления отображаются.

Что я здесь пропустил? (Я надеялся, что, написав все это, решение выскочит для меня, но пока нет.)

...