2013-07-29 4 views
0

У меня есть две частичные части, одна из которых называется _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. Теперь, как мне заставить его выполнить?

+1

Вам нужно будет выставить функцию (функции) в вашем файле js (тот, который включен в блок # jscripts) в глобальное пространство имен, а затем перейти к вызову в show.js.erb. Выявление глобального пространства имен является менее идеальным, но я не мог думать о другом способе работы над собственными проектами. –

+0

Хорошо, спасибо! –

ответ

0

В вашей show.js вы можете удалить secound строку и заменить его ти команды визуализации только как это:

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

метод Append присоединяет HTML на страницу, но когда вы добавляете JS его не выполняется, так как JS является только разобран один раз при загрузке страницы, поэтому метод append ios не является подходящим решением для вашей проблемы.

+0

Спасибо за помощь. Тем не менее, все еще смотри, чтобы решить это. –

+0

В чем проблема с решением, которое я разместил? Разве это не работает для ваших нужд? – davidb

+0

Он не отвечает на вопрос, опубликованный OP, ему нужно выполнить кусок js после того, как он делает с rails_ujs –