当前位置: 首页 > 面试题库 >

Rails 3:如何从js.erb文件调用javascript函数

戚鸿福
2023-03-14
问题内容

现在,我已经升级到Rails 3,我正在尝试找出分离和重用JavaScript片段的正确方法。这是我正在处理的方案:

我有一个包含两个区域的页面:一个包含应可拖动的元素,另一个具有可放置元素的页面。

页面加载时,我使用jQuery设置可拖动对象和可放置对象。目前,我在application.html.erb的头部具有脚本,我确定这不是正确的解决方案,但至少可以正常工作。

当我按下页面上的按钮时,将对我的控制器进行ajax调用,该调用将可拖动对象替换为一组也应该可拖动的元素。我有一个js.erb文件,可以在正确的位置显示部分内容。渲染后,我需要使新元素可拖动,因此我想重用当前位于application.html.erb中的代码,但是我没有找到正确的方法。我只能通过将代码直接粘贴到我的js.erb文件中(可恶)来使新元素可拖动。

我想要拥有的内容:-包含函数prepdraggables()和prepdroppables()的javascript文件-
一种从application.html.erb或js.erb文件调用函数的方法

我尝试使用:content_for来存储和重用代码,但是似乎无法使其正常工作。

我目前在application.html.erb开头的部分

<% content_for :drag_drop_prep do %>
  <script type="text/javascript" charset="utf-8">
  $(document).ready(function () {

  // declare all DOM elements with class draggable to be draggable
  $( ".draggable" ).draggable( { revert : 'invalid' });

  // declare all DOM elements with class legal to be droppable
  $(".legal").droppable({
    hoverClass : 'legal_hover',
    drop : function(event, ui) {

      var c = new Object();
      c['die'] = ui.draggable.attr("id");
      c['cell'] = $(this).attr("id");
      c['authenticity_token'] = encodeURIComponent(window._token);

      $.ajax({
         type: "POST",
         url: "/placeDie",
         data: c,
         timeout: 5000
      });

  }});
});
</script>
<% end %>

undo.js.erb

$("#board").html("<%= escape_javascript(render :partial => 'shared/board', :locals => { :playable => true, :restartable => !session[:challenge]}) %>")
// This is where I want to prepare draggables.
<%= javascript_include_tag "customdragdrop.js" %> // assuming this file had the draggables code from above in a prepdraggables() function
prepdraggables();

问题答案:

您不能只是将drag_drop_prep中的代码放入一个函数中,然后从application.html.erb和每个部分中调用该函数吗?我猜我误会了。

function prepdraggables(){
  // declare all DOM elements with class draggable to be draggable
  $( ".draggable" ).draggable( { revert : 'invalid' });

  // declare all DOM elements with class legal to be droppable
  $(".legal").droppable({
    hoverClass : 'legal_hover',
    drop : function(event, ui) {

      var c = new Object();
      c['die'] = ui.draggable.attr("id");
      c['cell'] = $(this).attr("id");
      c['authenticity_token'] = encodeURIComponent(window._token);

      $.ajax({
         type: "POST",
         url: "/placeDie",
         data: c,
         timeout: 5000
      });
  }});
}

在application.html.erb和undo.js.erb中:

prepdraggables();


 类似资料:
  • 本文向大家介绍如何从onmouseover事件中调用JavaScript函数?,包括了如何从onmouseover事件中调用JavaScript函数?的使用技巧和注意事项,需要的朋友参考一下 将鼠标移到任何元素上时,会触发onmouseover事件。 示例 您可以尝试运行以下示例,以了解如何从onmouseover事件调用JavaScript函数

  • 本文向大家介绍如何从onmouseout事件中调用JavaScript函数?,包括了如何从onmouseout事件中调用JavaScript函数?的使用技巧和注意事项,需要的朋友参考一下 当您将鼠标从该元素移出时,onmouseout会触发。 示例 您可以尝试运行以下示例,以了解如何从onmouseout事件中调用JavaScript函数

  • 问题内容: 如何从PHP调用JavaScript函数? 以下代码来自 xyz.html (单击按钮时),它在外部 xyz.js中 调用a 。这将调用wait.php。 和 wait.php 从那里以同样的方式从另一个PHP文件调用代码。 该否则工作正常,但它不会被调用我想要的方式。 问题答案: 就PHP而言(或者实际上,通常是一个Web服务器),HTML页面只不过是一个大字符串而已。 您可以使用P

  • 问题内容: 我正在做一个网络抓取项目。我正在使用的网站之一的数据来自Javascript。 在我之前的一个问题中,有人建议我可以直接从Python调用Javascript,但是我不确定如何实现。 例如:如果JavaScript函数定义为: 如何从Python调用JavaScript函数? 问题答案: 查找具有Python绑定的JavaScript解释器。(尝试Rhino?V8?SeaMonkey?

  • 问题内容: 我想从JavaScript 调用,这是一个C#函数。我尝试了下面的代码,但是无论JavaScript条件是还是,都被调用了! JavaScript代码: 后面的C#代码: 如何从JavaScript调用C#函数? 问题答案: 您可以使用Web方法和Ajax:

  • 问题内容: 是否可以从Javascript调用Java(GWT)方法?从文档中也不清楚。http://code.google.com/intl/zh- CN/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html上的 所有示例都演示了如何从JSNI(而非JS)函数调用Java函数。 更新1 这是一个Java代码: 这是html中的呼叫者按钮示例: 这