0

我有两个部分,一个称为 _contents.html.erb,它加载了 D3.js 的一些标签,另一个是 _show.js.erb,它在 JavaScript 中加载以与 _contents 中的标签进行交互。但是,JavaScript 只在页面加载时执行,所以我不确定如何让 JavaScript 在注入时执行。

这是 show.js.erb,其中调用了部分:

$("body").append( "<%=j render :partial => 'contents', :locals => {:folder => @folder } %>" );
$("#jscripts").append("<%=j render :partial => 'show', formats: :js, :locals => {:folder => @folder} %>");

这是_show.js.erb:

var data;
d3.json("/folders/<%= @folder.id %>.json"), function(error, json) {

if (error) return console.warn(error);

data = json;

var svg = d3.select("svg"),
folderChildren = [],
circle;

var submissions = data.submissions;


for(submission in submissions) {
    var submissionWords = submission.content.split(' ').join('');
    var size = submissionWords.length;
    folderChildren.push(size);
};

circle = svg.selectAll("circle")
 .data(folderChildren)
 .enter().append("circle")
     .attr("cy", 90)
     .attr("cx", String)
     .attr("r", Math.sqrt);

circle.exit().remove(); 

};

第二行注入了部分 JS,当我签入我的 Chrome 开发者控制台时,它确实成功地将它与我的 JavaScript 的其余部分一起注入。现在,我如何让它执行?

4

1 回答 1

0

在您的show.js中,您可以删除第二行并将其替换为渲染命令,如下所示:

<%=j render :partial => 'show', formats: :js, :locals => {:folder => @folder} %>

append 方法将 html 附加到页面,但是当您附加 js 时,它不会执行,因为 js 仅在您加载页面时解析一次,因此 append 方法 ios 不适合您的问题。

于 2013-07-29T10:49:16.283 回答