Drupal 7 - 如何将Javascript添加到视图中

4
基本上我想做的是在视图中的每一行迭代中添加一行JavaScript代码。
在Drupal 6中,这可以通过Views Custom Field来实现,现在已经集成到了Drupal 7中。
当我尝试使用“全局:自定义文本”字段时,它会剥离我的脚本标签。
有什么想法吗?
请注意:我不想使用drupal_add_js,因为这需要动态插入,我更喜欢不要将其内联(混乱)。基于所提供的JS,将弹出一个唯一的工具提示,我需要实际的行ID。
谢谢预先!
2个回答

4

为了帮助其他遇到相同情况的人(并且为了澄清问题),我在 Twitter 上回答了这个问题,但是我想在这里重新发布一下。

通常情况下,我不建议使用 views_php - 启用/使用 PHP 过滤器会有许多缺点,这些已经被广泛讨论过了(链接),并且它会增加另一个模块的负担,而你实际上并不需要它。在这种情况下,你仍然可以在预处理函数中使用 drupal_add_js() 来保持动态性。

简而言之,你有一个元素列表,需要将相同的事件绑定到它们。事件委托 立即成为可能的解决方案。现在你只需要一个父容器的事件处理程序,而不是 n 个事件处理程序,这将使你的页面更加响应。你不需要 jQuery,但如果你喜欢,可以尝试使用 .delegate()

关于如何从此外部JS文件获取ID,很简单:确保它在您正在抓取的源标记中。假设您正在寻找 ID,则通常可以在每一行的类“views-row-N”中找到它。否则,您将希望通过其他方式将类ID添加到模板中。在目标元素的事件处理程序(您的行,在父元素中匹配.views-row的元素)内,从您打算使用的类中解析ID,并根据从那里找到的值执行其余脚本。

这种方法有许多好处:它是一个较少的模块,是一个较少的安全问题来源,您的JS都在一个地方,绑定的事件处理程序更少,您的标记更轻,更易于阅读,并且事件委托意味着即使以后因某种原因动态地向DOM添加元素,此技术仍将起作用。至于具体内容,了解您打算如何使用弹出窗口会有所帮助。它是否对另一个节点进行AJAX调用?它是否基于列表中的位置执行某些操作?我很乐意从那里澄清我的答案。


0

你可能只是在寻找其中之一。这可能有点过度,但它会完成工作:http://drupal.org/project/views_php

安装该模块后,您将拥有全局选项:php字段。您可以将JavaScript直接发布到字段输出中,而不会被过滤掉。


该模块将值包装在PHP标记中,因此您无法输出JS。 - ryanka
1
不完全是这样,它有两个输入字段。一个是准备阶段,另一个是渲染阶段。渲染阶段只会输出你放进去的任何内容。准备阶段假设它是 PHP 代码。http://files.clikbox.com/skitch/ARROJO_Academy_Subscription_Page_%28Content%29-20121011-104523.png - danielson317

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接