我有两个部分,一个叫_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 Developer Console中检查时,它确实用我的其余JavaScript注入了它。现在,我该如何让它执行?
答案 0 :(得分:0)
在你的show.js
中你可以删除secound行并用render命令替换它,就像这样:
<%=j render :partial => 'show', formats: :js, :locals => {:folder => @folder} %>
append方法将html附加到页面但是当你追加js时它没有执行,因为js只在你加载页面时被解析一次,所以append方法不适合你的问题。