Ruby on rails Rails js操作在部分渲染后不会运行代码

Ruby on rails Rails js操作在部分渲染后不会运行代码,ruby-on-rails,ajax,jquery-ui,renderpartial,jquery-effects,Ruby On Rails,Ajax,Jquery Ui,Renderpartial,Jquery Effects,我正在尝试将新创建的部分添加到在create.js.erb controller操作响应中呈现的现有部分列表中,如果滚动到该项并通过高亮显示它或其他方式指示新添加的部分,那将非常好。我已经掌握了客户端javascript中滚动部分的诀窍,但是create.js.erb中部分渲染之后的所有效果都无法运行。有很多这样的例子,我只是不知道为什么我的不起作用 第一次尝试:create.js.erb 我很犹豫是否要问这个问题,因为我并不反对接受这样一个事实:我只是没有正确地遍历dom,但我一直在尝试各种组

我正在尝试将新创建的部分添加到在create.js.erb controller操作响应中呈现的现有部分列表中,如果滚动到该项并通过高亮显示它或其他方式指示新添加的部分,那将非常好。我已经掌握了客户端javascript中滚动部分的诀窍,但是create.js.erb中部分渲染之后的所有效果都无法运行。有很多这样的例子,我只是不知道为什么我的不起作用

第一次尝试:create.js.erb 我很犹豫是否要问这个问题,因为我并不反对接受这样一个事实:我只是没有正确地遍历dom,但我一直在尝试各种组合以使它正确

也:
如果我尝试嵌入更多的ruby来设置分部周围的id,它会破坏整个动作,并且分部不会被渲染。知道我在这里缺少什么吗?

我在函数中看不到在“完成”中触发的任何ruby代码,因此您可以将该代码移动到一个javascript文件中的方法中。这将使“create.js.erb”更干净、更易于调试,而且服务器不会多次将该代码发送到浏览器。感谢您的回复!为了澄清,您建议使用第二次尝试的代码并在.done中调用函数,而不是在那里定义它?下班后我会去试一试。除此之外,它似乎应该对你有用?是的,这就是我的意思。我建议您在Firefox Chrome上使用Firebug之类的工具,如果您还没有这样做的话,它会有类似的内置问题。有了它,你可以很容易地监控服务器发送给你的浏览器的内容,看看它是否是你所期望的。好吧,我给Firebug一个机会。我似乎不知道如何访问与我在Chrome的开发工具窗口中的控制器操作相对应的javascript文件。Firebug是否允许我单步执行create.js.erb、update.js.erb等操作。?我使用Rubymine,我只能在进行实际部分渲染的行上设置断点,但是Rubymine不允许我将javascript添加到我的手表列表中,所以我不能真正利用它。如果能够确定我是否有遍历问题,那就太好了。Firebug无法看到你的create.js.erb等,因为这些文件都在服务器上。服务器呈现这些文件并将最终结果发送到浏览器。在Firebugs Net选项卡中,您可以看到浏览器从服务器获取的内容。
$('#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');
$('#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');
});