繁体   English   中英

Rails 3和jQuery-如何将Ruby代码添加到元素中

[英]Rails 3 and jQuery - How to add Ruby code into an element

我正在尝试使用jQuery,jQuery表单插件和Ruby on Rails来创建一个AJAX图像上传器。

我已经完成了所有图像的上传和ActiveRecord的创建,但是AJAX部分本身不起作用-它应该导致<div>重新呈现Picture局部图像的集合。 但是,我试图插入的Ruby代码被渲染为字符串而不是被执行。

application.js中:

$(document).ready(function(){
    $("#upload input").change(function(event){
        $(this).parent().ajaxSubmit({
            beforeSubmit: function(a,f,o) {
                o.dataType = 'json';
            },
            complete: function(XMLHttpRequest, textStatus) {
                $("#img_div").html('<%= escape_javascript(render(@picture.idea.pictures)) %>');
            },
        });
    });
});

更改文件字段时将表单绑定到ajaxSubmit,这很正常。 .html()似乎是有问题的,因为字符串<%= escape_javascript(render(@picture.idea.pictures)) %>仅打印在<div>

_form.html.erb:

<div id="img_div"><%= render @picture.idea.pictures %></div>

该行在页面刷新时可以正常工作以呈现集合。

而且我知道Ruby代码没有问题,因为我以前在create.js.erb文件中有该行。 我将继续使用该方法,除了现在使用ajaxSubmit之外,我无法将create动作呈现为JS-始终将其呈现为HTML。

因此,从理论上讲,我可以通过以下两种方法之一解决问题-找出为什么ruby代码在application.js中呈现为字符串,或者使pictures#create呈现为JS。

我做错了什么事情没有发生?

编辑:

好的,看来我完全不能在Applications.js中使用Ruby代码或变量,并且尝试将Ruby集合传递到JavaScript中是行不通的,因为那样便无法访问重新创建Ruby所需的所有属性。正确的HTML。

我需要一种确保将pictures#create操作称为JS的方法。 那么我可以用format.js确保create.js.erb使用,在那里我知道我的代码工作。 有什么建议?

如果它位于视图中的脚本中,则只能在javascript中嵌入ruby代码。 public/javascripts/任何内容都不会命中服务器,因此无法找到ruby变量。

您要做的是在包含脚本之前将ruby变量存储在javascript变量中。

<head>
 <script type="text/javascript">
   var youJsVariable = <%= ruby_array %>;
 </script>
 <%= javascript_include_tag :defaults, 'application' %>
</head>

这样,您就不必编写很多内联脚本,这些脚本可以使那些不引人注意的人摆脱困境。

问题是你试图在浏览器大小的JavaScript中运行ruby代码:

'<%= escape_javascript(render(@picture.idea.pictures)) %>'

相反,您应该使用HTML方法设置render(@ picture.idea.pictures)已经呈现的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM