【问题标题】:Drupal 7 - How to add Javascript to a ViewDrupal 7 - 如何将 Javascript 添加到视图
【发布时间】:2012-10-11 15:50:58
【问题描述】:

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

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

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

有什么想法吗?

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

提前致谢!

【问题讨论】:

    标签: javascript drupal drupal-7 drupal-views


    【解决方案1】:

    在 Twitter 上回复,但为了其他遇到相同情况的人的利益(并且为了澄清),我想我会在这里重新发布。

    一般来说,我不推荐views_php - 启用/使用已经是discussed at length 的PHP 过滤器有很多缺点,而且当你真的不需要它时,它会增加另一个模块的膨胀。在这种情况下,您仍然可以在预处理函数中使用 drupal_add_js() 并保持动态。

    简而言之,您有一个需要绑定相同事件的元素列表。 Event delegation 立即作为一种可能的解决方案浮现在脑海中。您现在拥有一个用于父容器的事件处理程序,而不是 n 事件处理程序,这将使您的页面更具响应性。您不需要 jQuery,但如果您更喜欢使用 .delegate()

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

    这种方法有很多好处:它减少了一个模块,减少了一个安全问题的来源,您的 JS 都在一个地方,您绑定的事件处理程序更少,您的标记更轻巧且更易于阅读,并且事件委托意味着即使后来由于某种原因动态地将元素添加到 DOM 中,这种技术仍然有效。至于细节,这将有助于准确了解您打算对弹出窗口做什么。它是否对另一个节点进行 AJAX 调用?它是否根据列表中的位置做某事?我很乐意从那里澄清我的答案。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 该模块将值包装在 PHP 标记中,因此您无法输出 JS。
      • 不完全是它有两个输入字段。准备和渲染。渲染只会输出你放入的任何内容。准备假设它是 php 代码。 files.clikbox.com/skitch/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      相关资源
      最近更新 更多