4

基本上我想要做的是在视图中的每一行迭代中添加一行 javascript 代码。

在 Drupal 6 中,这曾经是通过 Views Custom Field 完成的,现在已经集成到 Drupal 7 中。

当我尝试使用“全局:自定义文本”字段时,它会删除我的脚本标签。

有任何想法吗?

请注意:我不想使用 drupal_add_js,因为它需要动态插入,我不想内联使用它(混乱)。将根据提供的 JS 弹出一个独特的工具提示,我需要实际的行 ID。

提前致谢!!

4

2 回答 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 调用?它是否根据列表中的位置做某事?我很乐意从那里澄清我的答案。

于 2012-10-11T17:34:49.980 回答
0

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

安装模块,您将拥有全局选项:php 字段。您可以只将 javascript 发布到字段输出中,它不会被过滤掉。

于 2012-10-11T16:24:46.733 回答