2011-02-22 33 views
0

我有一個Ajax請求來更新網頁的一部分。這是我做的,代碼:如何使Rails以新的Javascript文件響應Ajax請求?

render :update do |page| 
    page.replace_html "my_id", :partial => "my_partial" 
end 

由於此更新的一部分,我想在一些新的JavaScript加載,處理這一新加載的頁面的一部分的行爲。

,我已經直接包含在部分作品完美中的JavaScript:

<script type="text/javascript"> 
    alert('reached'); 
</script> 

然而,JavaScript的我加載與部分內引用沒有被加載:

<script type="text/javascript" src="/javascripts/myScript.js"></script> 

做這件事的正確方法是什麼?

+0

爲什麼不預先加載JavaScript而不是將其包含在部分?這樣你的內容和代碼是分開的。 – Intelekshual 2011-02-22 21:42:06

+0

@Intelekshual所以我的JavaScript特定於處理該部分的內容,並且包括設置部分元素的觀察者。如果要觀察的元素尚不存在,我將如何預加載JavaScript,並且預先加載用戶可能在做任何事情之前可能做的所有事情的所有Javascript,這會不必要地繁重? – 2011-02-22 21:58:35

+0

「不必要的重量」取決於應用程序在做什麼。請參閱dstarh關於如何處理尚不存在的元素的答案。 – Intelekshual 2011-02-22 22:13:38

回答

1

我嘗試以下,似乎工作,不知道這是否會在你的情況下工作,你可能需要改寫爲原型的JavaScript:

<script type="text/javascript"> 
var e = document.createElement('script') 
e.setAttribute("type","text/javascript"); 
e.setAttribute("src", 'url_of_js_external'); 
document.getElementsByTagName('head')[0].appendChild(e); 
</script> 
+0

btw我認爲這也可以通過jQuery使用getScript()http:// api來處理。 jquery.com/jQuery.getScript/ – dstarh 2011-02-22 22:21:26

+0

問題是rails'javascript helpers使用prototypejs。因爲我不完全知道原型API,我用普通的javascript寫了可能的解決方案。我是jquery的忠實粉絲,建議儘可能使用它。 – 2011-02-22 22:48:42

+0

Rails現在很漂亮js不可知論者,原型可以切換爲jQuery沒有太多的痛苦 – dstarh 2011-02-22 23:11:10

0

使用jQuery的實時框架應該做你想要什麼。颳起了這裏

http://jsfiddle.net/bRxxF/

$('.doit').live('click',function(){ 
    $(this).addClass('red'); 
}); 

一個例子基本上你可以使用實時觀看您的選擇匹配,並且對他們的響應事件的頁面上新的DOM元素。這樣,你的JavaScript加載早,但只有綁定一旦阿賈克斯發生