2009-12-21 22 views
1

我在rails 2.3.3上使用prototype/rjs,ruby 1.86和我的form_remote_for到我的「創建」控制器只是顯示create.js.rjs而不是執行它。奇怪的是,所有其他行動+ rjs的工作很好,只是「創建」行動不工作任何幫助,將不勝感激。提前致謝!form_remote_for沒有執行RJS,只是顯示JS

更新:澄清,它應該工作:_form提交 - > POST - >創建方法 - > js - >加載不同的部分。相反,它的工作:_form提交 - > POST - > create方法 - > JS輸出文本

_form.html.haml:

- form_remote_for(@network) do |f| 
    = f.error_messages 
    %p>< 
    = f.label :name 
    = f.text_field :name 
    %p>< 
    = f.label :image_url 
    = f.text_field :image_url 
    %p>< 
    = f.label :url 
    = f.text_field :url 
    %p>< 
    = f.submit "Create" 

create.js.rjs:

page.insert_html(:bottom, :networks, :partial => 'networks/network', :object => @network); 

networks_controller:

def create 
    @network = Network.new(params[:network]) 

    respond_to do |format| 
    if @network.save 
     flash[:notice] = 'Network was successfully created.' 
     format.js #also doesn't work with { render :layout => false } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @network.errors, :status => :unprocessable_entity } 
     format.js 
    end 
    end 
end 

輸出(它顯示爲html):

try { 
Element.insert("networks", { bottom: "<div class='network'>\n <img alt=\"Df\" src=\"/images/df\" />\n <a href=\"d\">wer</a>\n <a href=\"/networks/39\">Show</a>\n <a href=\"/networks/39/edit\">Edit</a>\n <a href=\"/networks/39\" onclick=\"if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'dfleb/EzulRpXnZekVfbhAkX3G9jHmhnWTBLSk7iRSE='); f.appendChild(s);f.submit(); };return false;\">Destroy</a>\n</div>\n" }); 
} catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.insert(\"networks\", { bottom: \"<div class=\'network\'>\\n <img alt=\\\"Df\\\" src=\\\"/images/df\\\" />\\n <a href=\\\"d\\\">wer</a>\\n <a href=\\\"/networks/39\\\">Show</a>\\n <a href=\\\"/networks/39/edit\\\">Edit</a>\\n <a href=\\\"/networks/39\\\" onclick=\\\"if (confirm(\'Are you sure?\')) { var f = document.createElement(\'form\'); f.style.display = \'none\'; this.parentNode.appendChild(f); f.method = \'POST\'; f.action = this.href;var m = document.createElement(\'input\'); m.setAttribute(\'type\', \'hidden\'); m.setAttribute(\'name\', \'_method\'); m.setAttribute(\'value\', \'delete\'); f.appendChild(m);var s = document.createElement(\'input\'); s.setAttribute(\'type\', \'hidden\'); s.setAttribute(\'name\', \'authenticity_token\'); s.setAttribute(\'value\', \'dfleb/EzulRpXnZekVfbhAkX3G9jHmhnWTBLSk7iRSE=\'); f.appendChild(s);f.submit(); };return false;\\\">Destroy</a>\\n</div>\\n\" });'); throw e } 

更新:

_networks.html.haml:

%div{:id=> 'network#{network.id}', :name => 'network'} 
    = image_tag network.image_url 
    = link_to network.name, network.url 
    - if logged_in? && self.current_user.login = "admin" 
    = link_to 'Show', network 
    = link_to 'Edit', network_path(network), :method => :put, :class => "put" 
    = link_to 'Destroy', network_path(network), :method => :delete, :class => "delete" 
    %br 

回答

1

通常這是指某物在局部被打破。我之前有過這種情況。你能顯示部分代碼嗎?

你也可能得到它通過包裝你的RJS與

page << ' ' 

檢查工作,以確保你沒有一個更新的參數在你的任何視圖代碼。更新參數關閉了上下文。有關更多詳細信息,請參閱此post

+0

Corey,謝謝你的回覆。沒有偏 - 這是通過創建的POST,所以它只是重定向在html – user117046 2009-12-21 22:01:28

+0

我指的是這條線: page.insert_html(:bottom,:networks,:partial =>'networks/network', 什麼是在網絡/網絡部分? – coreypurcell 2009-12-22 13:33:51

+0

我已經添加了網絡/網絡部分。感謝您的解釋鏈接 - 很有道理;但是,將其包裝在「page <<」'「中並沒有解決問題另一個我不認爲會影響這個問題的因素是我使用了一個單獨的索引控制器/視圖,它具有網絡/網絡部分,並且通過rjs在「新網絡」上加載網絡/鏈接,並希望通過重新加載網絡/網絡部分來刷新div。有一個更好的方法來做到這一點,但這將是非常好的理解這個問題的未來任何想法? – user117046 2009-12-22 20:37:43

0

我有這個確切的問題。我通過確保<%= javascript_include_tag:defaults%>在我的所有javascript_include標記中列出了LAST來解決此問題。嘗試一下。