2011-02-16 149 views
5

是否可以在rails中通過控制器調用javascript函數?從控制器調用javascript函數

+0

ssri,我所做的是我通過AJAX調用Rails控制器,然後激活一個調用javascript函數的部分。 – Trip 2011-02-16 14:38:57

回答

13

我所做的是讓Rails控制器產生一個JavaScript動作。是否有它稱爲包含JavaScript的部分。

除非你想在頁面加載時激活它,否則我會通過AJAX進行設置。這樣我就可以對控制器進行AJAX調用,然後調用一個JavaScript文件。

這可以通過投票可以看出:

首先,AJAX

//This instantiates a function you may use several times. 

jQuery.fn.submitWithAjax = function() { 
    this.live("click", function() { 
    $.ajax({type: "GET", url: $(this).attr("href"), dataType: "script"}); 
    return false; 
    }); 
}; 

// Here's an example of the class that will be 'clicked' 
$(".vote").submitWithAjax(); 

二控制器

是被點擊了某個屬性HREF調用的類$(".vote")我控制器。

def vote_up 
    respond_to do |format| 
    # The action 'vote' is called here. 
    format.js { render :action => "vote", :layout => false } 
    end 
end 

現在控制器加載一個AJAX文件

// this file is called vote.js.haml 
== $("#post_#{@post.id}").replaceWith("#{ escape_javascript(render :partial => 'main/post_view', :locals => {:post_view => @post}) }"); 

您已經成功地稱爲來自控制器的JavaScript函數。

+0

是否有可能在vote.js.haml中調用函數?如何在進行函數調用時傳遞一個變量? – 2011-07-29 18:25:27

0

不,但是您可以輸出將在您的視圖中立即調用的javascript

<script type="text/javascript"> 
    function IWillBeCalledImmediately() 
    { 
     alert('called'); 
    }; 
    IWillBeCalledImmediately(); 
</script> 

但是,它可能會更好地使用jQuery和使用ready事件。

<script type="text/javascript"> 
    $(function() { 
      alert('called'); 
     }); 
</script> 
相關問題