2011-02-22 34 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加载早,但只有绑定一旦阿贾克斯发生