У меня есть две частичные части, одна из которых называется _contents.html.erb, которая загружается в некоторые теги для D3.js, а другая, _show.js.erb, которая загружается на JavaScript для взаимодействия с тегами в _contents. Однако JavaScript выполняется только при загрузке страницы, поэтому я не уверен, как заставить 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. Теперь, как мне заставить его выполнить?
Вам нужно будет выставить функцию (функции) в вашем файле js (тот, который включен в блок # jscripts) в глобальное пространство имен, а затем перейти к вызову в show.js.erb. Выявление глобального пространства имен является менее идеальным, но я не мог думать о другом способе работы над собственными проектами. –
Хорошо, спасибо! –