Ruby on rails 删除重新生成HTML时丢失的链接行为。我该怎么办?

Ruby on rails 删除重新生成HTML时丢失的链接行为。我该怎么办?,ruby-on-rails,Ruby On Rails,如果我在页面上重新生成Rails delete链接,如下所示: <a href="/categories/19" data-method="delete" data-confirm="Are you sure?" ..>Link</a> 加载此页面时,Rails中的某些内容必须设置此链接的行为,因为在我承诺删除某些内容之前,我会得到一个很好的“确定吗?”。然而,当我重新生成HTML时,我猜我需要重新初始化行为,但我不确定这是从哪里来的。有谁能告诉我,在生成这个HTM

如果我在页面上重新生成Rails delete链接,如下所示:

<a href="/categories/19" data-method="delete" data-confirm="Are you sure?" ..>Link</a>


加载此页面时,Rails中的某些内容必须设置此链接的行为,因为在我承诺删除某些内容之前,我会得到一个很好的“确定吗?”。然而,当我重新生成HTML时,我猜我需要重新初始化行为,但我不确定这是从哪里来的。有谁能告诉我,在生成这个HTML链接后,是否有一个函数需要再次调用?谢谢

如果您的意思是“确定吗?”弹出消息在重新加载页面后无法工作,则问题可能在于TurboLink。看一看,看看如何使用一个)。禁用单个链接的TurboLink;b) 。对整个HTML文档禁用它;或c)。将其完全从Rails项目中删除(可能没有明显的影响)。

我怀疑您的问题在于用于设置链接的javascript。事件的顺序是这样的:

  • 页面加载
  • dom ready js运行并使用数据确认属性将onclick事件附加到所有内容
  • 其他一些js稍后运行,并添加一个带有数据确认属性的新元素。这没有onclick,因为当第2步发生时它不在dom中
  • 一个解决方案是确保设置链接的js位于一个函数中,当您将新元素添加到页面时可以调用该函数。然后,您可以向js添加一个对此的调用,js将添加新元素

    问题是,您可能最终会将功能重新添加到已经存在的元素中,因此它们现在有两个onclick事件,每个事件都做相同的事情(因此发生两次)。为了解决这个问题,您的代码可以避免将它添加到已经有该事件的元素中,或者从所有将获得onclick的元素中删除该事件,然后应用onclick


    或者,您可以将代码设置为接受一个作为选择器的参数,并且它仅将onclick事件应用于带有选择器的*元素中的元素**。因此,当您在dom ready中调用它时,您将传递“body”,稍后再调用时,您将传递“#正在加载的新div的id”或类似的内容。

    您可以这样做,这将仅关闭此特定URL的TurboLink

    <span data-no-turbolink><a href="/categories/19" data-method="delete" data-confirm="Are you sure?" ..>Link</a></span>
    
    
    
    您到底有什么问题?当我重新生成HTML链接时,JavaScript链接行为将丢失。例如,当我有一个删除链接(带有data method=“delete”和data confirm=“you sure?”)时,它通过显示删除确认来处理它。当生成新的HTML时,这将丢失。我理解为什么会发生这种情况,但我不知道如何修复它,从而可以重新应用原始链接行为(显示协同信息框)以及turbolinks,主要目的是在当前维护状态下加载页面。我希望链接的行为与重建前一样。我明白了,这是在TurboLink中。事实上,我想保持这种行为。我想将链接行为重新应用到以后生成的HTML。我是否可以在turbolinks中调用一些东西,将行为重新应用于链接?我不需要担心将行为重新添加到链接中,因为我完全替换了所有有问题的链接。当你说“保持行为”时,你的意思是保持弹出消息正常工作,还是你对重新加载页面后弹出消息不工作感到满意?如果是前者,请看一看。除非您想沉浸在JavaScript中,否则最好的做法可能是将
    数据no turbolink
    添加到
    链接中。我想保留turbolinks,但我想将弹出消息click events重新绑定到新生成的链接。我已经查看了turbolinks.js文件,但似乎没有任何方法可以通过封装的闭包调用函数。因此,如果要生成链接,我似乎不能使用TurboLink删除链接行为。实际上,该功能似乎与TurboLink无关。我已经禁用了它,无法理解为什么确认仍然出现。该功能存在于jquery_ujs文件中,它创建了一个带有大量方法的$.rails对象,但我无法从中看出如何在删除之前重新分配确认消息。Turbolinks与出现的确认框无关,后者由JavaScript处理。问题是Turbolinks阻止JavaScript在页面重新加载后启动,这就是为什么在随后的单击中看不到确认弹出窗口的原因。为此链接、页面或整个项目禁用Turbolinks将确保JavaScript(此处为确认框)始终正常工作。Turbolinks的目的是在用户浏览您的站点时加速页面加载,但性能提升可能很小,而对JavaScript的干扰是一个真正的麻烦。