部分渲染时执行JavaScript?

时间:2013-07-29 10:24:30

标签: javascript ruby-on-rails ruby

我有两个部分,一个叫_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注入了它。现在,我该如何让它执行?

1 个答案:

答案 0 :(得分:0)

在你的show.js中你可以删除secound行并用render命令替换它,就像这样:

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

append方法将html附加到页面但是当你追加js时它没有执行,因为js只在你加载页面时被解析一次,所以append方法不适合你的问题。