基本上,我要做的是向 View 中的每一行迭代添加一行 javascript 代码。
在 Drupal 6 中,这曾经通过 View 自定义字段完成,现在已集成到 Drupal 7 中。
当我尝试使用“全局:自定义文本”字段时,它会删除我的脚本标签。
有什么想法吗?
请注意:我不想使用 drupal_add_js,因为它需要动态插入并且我不希望内联使用它(困惑)。将根据提供的 JS 弹出一个独特的工具提示,我需要实际的行 ID。
提前致谢!!
最佳答案
在 Twitter 上回复,但为了遇到相同情况的其他人的利益(并且为了澄清)我想我会在这里重新发布。
一般来说,我不会推荐 views_php - 启用/使用 PHP 过滤器有很多缺点,这些缺点已经被 discussed at length ,当你真的不需要它时,它会增加另一个模块的膨胀。在这种情况下,您仍然可以在预处理函数中使用 drupal_add_js()
并保持动态。
简而言之,您有一个需要将同一事件绑定(bind)到的元素列表。 Event delegation立即想到一个可能的解决方案。您现在有一个用于父容器的事件处理程序,而不是 n 事件处理程序,这将使您的页面更具响应性。你不需要 jQuery,但如果你喜欢使用 .delegate()
至于如何从这个外部 JS 文件中获取 ID,很简单:确保它在您要抓取的源代码标记中。假设您正在寻找 row ID,您通常可以在每一行的“views-row-N”类中找到它。否则,您需要通过其他方式将类 ID 添加到模板中。在目标元素的事件处理程序中(你的行,一个与父元素中的 .views-row 匹配的元素),从你打算使用的类中解析 ID,并根据你从那里找到的值执行脚本的其余部分.
这种方法有很多好处:它减少了一个模块,减少了安全问题的根源,您的 JS 都在一个地方,您绑定(bind)的事件处理程序更少,您的标记更轻便且更易于阅读,并且事件委托(delegate)意味着即使稍后出于某种原因将元素动态添加到 DOM 中,该技术仍然有效。至于具体细节,这将有助于准确了解您打算对弹出窗口执行的操作。它是否正在对另一个节点进行 AJAX 调用?它是根据列表中的位置做某事吗?我很乐意从那里澄清我的答案。
关于javascript - Drupal 7 - 如何将 Javascript 添加到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12843618/