Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript java脚本因空格字符而失败_Javascript_Ruby On Rails_Append_Haml - Fatal编程技术网

Javascript java脚本因空格字符而失败

Javascript java脚本因空格字符而失败,javascript,ruby-on-rails,append,haml,Javascript,Ruby On Rails,Append,Haml,我认为有些代码是这样的 $(".someclass").hover(function(){ $(this).append("#{render "layouts/show_some_file", title: "some_file"}"); }); show\u some\u file.html.haml文件由两个嵌套的基本div组成 在我的浏览器中,我得到 $(".someclass").hover(function(){ $(this).append("<div>

我认为有些代码是这样的

$(".someclass").hover(function(){
    $(this).append("#{render "layouts/show_some_file", title: "some_file"}");
});
show\u some\u file.html.haml
文件由两个嵌套的基本div组成

在我的浏览器中,我得到

$(".someclass").hover(function(){
    $(this).append("<div>
        <div>some text</div>
        </div>
    ");
});
$(“.someclass”).hover(函数(){
$(this.append()
一些文本
");
});

悬停时,我进入我的chrome控制台
SyntaxError:Unexpected token-liked
。我删除了我控制台中的空白,它成功了。但是如何在我的ruby渲染中清除空白呢?

显而易见的做法是编辑布局/显示一些文件并删除空白。问题不在于空格,而是回车。Javascript不喜欢多行字符串。如果我了解Ruby,我可能会编写一个正则表达式来去除诸如“\r\n”之类的东西,这是PHP/C语法中的回车换行符。

因为您的
{render}
的结果是HTML,尽管您可能会使用它一次,但将其存储在HTML中并使用JavaScript检索可能更有意义。模仿模板,下面是一个我的意思示例:

<script id="my_render" type="text/template">
    #{render "layouts/show_some_file", title: "some_file"}
</script>

<script type="text/javascript">
    $(document).ready(function () {
        var render_content = $("#my_render").html();
        $(".someclass").hover(function () {
            $(this).append(render_content);
        });
    });
</script>

#{呈现“布局/显示一些文件”,标题:“一些文件”}
$(文档).ready(函数(){
var render_content=$(“#我的_render”).html();
$(“.someclass”).hover(函数(){
$(this).append(呈现内容);
});
});
它有点像一个模板。使用
脚本
标记,但将其
类型
设置为不会导致执行的内容。由于
script
标记在页面上永远不可见,因此您将永远不会出现视觉问题…不像在div中这样做…HTML将与页面的其余部分“分离”


我相信使用Ruby有更好的解决方案,但如果您要将部分视图输出到JavaScript代码,我必须问一下原因。对我来说,加入“模板”更有意义。我知道这并不能直接回答您当前的问题,但这是另一种选择:)

我不能完全肯定它会有帮助,但您可能应该使用
变体,而不是
{}

由于它是针对javascript的,正确的方法应该是

如果使用HAML,则用ERB替换标记

编辑:可能是
!=“$(this).append(“#{escape_javascript(render“layouts/show_some_file”,title:“some_file”))”)”

事实上,我得到了它,正确的做法之一是:

$("someclass").hover(function(){
            $(this).append("#{escape_javascript render "layouts/show_some_file", title: "some title"}");
          });

我不确定是否要用Ruby更改某些内容,但有一个选项是使用
{render“layouts/show_some_file”,title:“some_file”}
。然后,您可以使用
$(this).append($(“#some_id”).html())获取其内容。它有点像一个模板。使用
脚本
标记,但将其
类型
设置为不会导致执行的内容。由于
script
标记在页面上永远不可见,因此您将永远不会出现视觉问题……不像在
div
中这样做……HTML将与页面的其余部分“分离”。我怀疑它是否相关,但我不知道您可以像以前那样在引号中使用引号。@Peteralfin我不确定您是否可以,但是服务器端代码首先计算,因此结果不是嵌套的引号。它在源代码中可能看起来很奇怪(除非IDE发现了它),但最终应该是这样的correct@Ian谢谢,但有可能有更直接的解决方案吗?@Newben,很遗憾,我不知道。希望有人来解释一下我们似乎缺少的快速简单的解决方案。我发布了一个答案,作为你或任何人的选择;我将继续寻找真正的solutionok,这有点像python中的缩进。因此,与使用
{render“layouts/show_some_file”直接插入文件内容不同,title:“some_file”}
ruby不允许将其保存到变量中,然后删除返回值并插入返回值被剥离的字符串?我建议的是上排答案中的
escape_javascript
。我只是不认识鲁比,否则我可能会想到它。有点苛刻,我只是因为暗示而没有解决问题而被否决,不是因为失去2分的声誉意味着蹲着。你是说你可以用HAML文件吗?如果你读了最后一句话,我不会说这样的话。。。我只是假设你可以用HAML做你能用ERB做的一切。环顾四周,似乎正确的方法可能是这样:
!=“$(this).append(“#{escape_javascript(render“layouts/show_some_file”,title:“some_file”)}”)”
ah就是这样,我找到了相同的响应,我没有看到您的编辑;)谢谢你,伊恩,我找到了办法。顺便说一句,我试着使用jquery,使用trim()或一些正则表达式替换,但没有一个有效,很高兴你找到了正确的方法!是的,仅仅用JavaScript来“修复”这个问题是行不通的,因为Ruby将被评估、发送到浏览器并由浏览器编译……这将为字符串中的换行符抛出异常。您必须以不同的方式处理它(如我的答案),或者在它进入浏览器之前修复它(如您的答案)