我正在尝试将新创建的部分添加到现有的部分列表中,该列表在我的create.js.erb
控制器操作响应中呈现,滚动到该项目并通过突出显示它或其他内容来指示新添加会非常好。我已经掌握了客户端javascript中滚动部分的窍门,但是在部分渲染之后出现的所有效果create.js.erb
都没有运行。有很多这种可能的例子,我只是不确定为什么我的不起作用。
第一次尝试:create.js.erb
$('#allTab').removeClass('active');
$('#activeTab').addClass('active');
$('#completeTab').removeClass('active');
// TODO: Make sure that li below gets an id="campaign_####" before this render happens.
$('#activeTabList').append("<li><%= escape_javascript(render partial: 'fundraisers/fundraiser', locals: {f: @fundraiser, g: @group}) %></li>")
var number_li = $('#activeTabList li').length;
var $newcampaigndiv = $('#activeTabList li').last().children("panel");
$('#number_of_campaigns').text('Campaigns (' + number_li + ')');
$("body").animate({
scrollTop: $newcampaigndiv.offset().top
}, {
duration: 600,
queue: false
});
$('#activeTabList li').last().children("panel").effect('highlight');
第二次尝试:create.js.erb
$('#allTab').removeClass('active');
$('#activeTab').addClass('active');
$('#completeTab').removeClass('active');
// TODO: Make sure that li below gets an id="campaign_####" before this render happens.
$.when($('#activeTabList').append("<li><%= escape_javascript(render partial: 'fundraisers/fundraiser', locals: {f: @fundraiser, g: @group}) %></li>")).done(function () {
var number_li = $('#activeTabList li').length;
var $newcampaigndiv = $('#activeTabList li').last().children("panel");
alert('gets here at least');
$('#number_of_campaigns').text('Campaigns (' + number_li + ')');
$("body").animate({
scrollTop: $newcampaigndiv.offset().top + $newcampaigndiv.height() / 4 - $(window).height() / 2
}, {
duration: 600,
queue: false
});
$('#activeTabList li').last().children("panel").effect('highlight');
});
我很犹豫要不要问这个问题,因为我不反对接受我只是没有正确遍历 dom 的事实,但我一直在尝试各种组合以使其正确。
还:
如果我尝试嵌入更多的 ruby 来设置<li>
周围部分的 id,它会破坏整个动作并且不会渲染部分。知道我在这里缺少什么吗?