如何在文本字段的交换中重新呈现javascript?

时间:2011-06-15 21:17:26

标签: javascript ruby-on-rails ruby render partial

我不是计算机科学家,而是贸易机械工程师。因此,如果我不使用正确的词语来描述事物,我会事先道歉。我会尽力清楚。

我正在开发一个显示客户太阳能逆变器功率输出的Rails站点。在绘制功率输出的页面上(使用javascript)我希望在该页面上的javascript(带有嵌入式ruby)在文本字段的更改中重新呈现(其中包含日期)。当客户想要查看不同日期的电力输出数据时,此页面的javascript将相应地重新呈现。

我原本试图在控制器操作中使用render :updatepage.replace_html,这会在文本字段的更改中被调用,但经过进一步的研究发现这不是一种好的做法?而且更重要的是,我无法让它发挥作用(我很惭愧。非常感谢那些试图帮助我的响应者!)。

我观看了Railscast#136,并试图将这些信息调整到我需要的位置。

页面为poweroutput.html.erb。我的所有javascript都在主html文件中的脚本标记内。 poweroutput.html.erb上的文本字段元素的html如下(它不起作用):

<%= text_field_tag(
      'dt', nil,
      {  :id => 'date-field',
         :class => 'dateformat-d-dt-m-dt-Y',
         :onchange => remote_function(
             :url => {:controller => 'pages', :action => 'poweroutput'})
      })
%>

所以我认为上面基本上只是刷新/重新渲染文本字段的更改页面,但没有任何反应。

请帮我洗头。我认为我的问题的一部分必须是我不明白remote_function方法调用的底层Ajax函数是做什么的。如果您能够对此提出一些看法,或者提出一种完全不同的方法来重新渲染javascript on text of text field,我将非常感激!

2 个答案:

答案 0 :(得分:0)

我认为有两件事可能是错的:

1)用div包装你的部分,因为AJAX调用结果渲染为div:

<script type="text/javascript">
   <div id="poweroutputscript_partial">
     <%= render 'javascripts/poweroutputscript.html.erb' %>
   </div>
</script>

2)在您的操作中,指定部分的完整路径:

page.replace_html "poweroutputscript_partial", :partial => 'javascripts/poweroutputscript'

答案 1 :(得分:0)

首先,我会使用firebug或类似方法检查文本字段更改时是否发送了请求。接下来我会检查一下响应是什么。如果是500错误,请检查应用程序日志以查找堆栈跟踪。

我的猜测是响应将是500错误,可能是因为你的update_poweroutput函数试图渲染一个不存在的部分,我认为你需要指定

:partial => 'javascripts/poweroutputscript.html.erb'

除非您正在呈现页面视图文件夹中存在的不同部分。在这种情况下,您是否在控制器中设置了所有必要的变量?