2009-07-19 57 views
0

我遇到了一個奇怪的問題。
我只是想按下按鈕時在頁面上顯示加載圖標。
如果我給form_remote_for的呼叫包含Ajax選項,那麼RJS腳本不起作用。當我在form_remote_for中設置選項時,爲什麼我的RJS停止工作?

這個作品( 「加載」 由控制器和RJS隱藏):

查看:

<%=form_remote_for(:job, @job, {:url => {:action=>:create}}) do |f| %> 
[...] 
<div id="loading">Loading...</div> 

控制器:

def create 
    render :action => "create.js.rjs" 
end

RJS:

page.hide 'loading' 

這不起作用(只是添加:loading=>和裝載由視圖顯示,但是不能隱藏回控制器,因爲它以前):

<%=form_remote_for(:job, @job, {:url => {:action=>:create}}, {:loading=>"$('loading').show()"}) do |f| %> 
[...] 
<div id="loading" style="display:none;">Loading...</div> 

所以,如果我的電話給form_remote_for包含Ajax選項,那麼RJS腳本不起作用。爲什麼?

+0

米克,我更新了我的答案。看看它是否適合你,請。 – andymeadows 2009-07-20 02:58:39

回答

0

您的形式更改爲:

<% form_remote_for (:job, @job, :url => {:action => :create}, :loading =>"$('loading').show()") do |f| %> 
# ... 
<% end %> 

確保選中創建是:

# POST /jobs 
    # POST /jobs.xml 
    def create 
    render :action => "create.js.rjs" 
    end 

,並確保您create.js.rjs是:

page.hide 'loading' 

此方案適用於我。就像你這樣做的,它是在模板中返回erb的,因爲它是發佈到「新」的 - 基於我做的一個快速腳手架實現。現在我可能仍然會錯過一些東西,因爲正如我在大量編輯之前所說的那樣,我是新的,但這應該會讓你走。

編輯:刪除「這是你的代碼?」帖子。

+0

如果不是我的實際代碼:)我已更正了我的帖子。 – MickaelFM 2009-07-19 23:13:11

+0

我不明白爲什麼 - 它不工作時不使用RJS(帶大括號) - 它不使用RJS時(仍帶大括號) - 並刪除它與RJS一起使用的大括號 – MickaelFM 2009-07-20 19:58:55

0

雖然沒有直接回答你的問題「爲什麼」它不工作,你有沒有看使用:loaded參數隱藏加載DIV,而不是依賴於rjs文件?

0

假設你使用的原型,你應該使用Ajax.Responders做顯示/隱藏:

Ajax.Responders.register({ 
    onCreate: function() { 
    Ajax.activeRequestCount++; 
     if($('loading') && Ajax.activeRequestCount>0) { 
     Effect.Appear('loading',{duration:0.4,queue:'end'}); 
     };   
    }, 
    onComplete: function() { 
    Ajax.activeRequestCount--; 
     if($('loading') && Ajax.activeRequestCount==0) { 
     Effect.Fade('loading',{duration:0.4,queue:'end'}); 
     };  
    } 
}); 

你可以把它貼在公共/ JavaScript的/ application.js中

非侵入式JavaScript - 將工作在任何帶有隱藏的加載div和ajax事件的頁面上。

相關問題