2012-10-11 41 views
4

基本上我想要做的是將一行JavaScript代碼添加到視圖中的每一行迭代中。Drupal 7 - 如何將JavaScript添加到視圖

在Drupal的6這個曾經與視圖的自定義字段,當我嘗試使用已經被集成到Drupal的7

完成「環球:自定義文本」字段它剔除了我的腳本標籤。

任何想法?

請注意:我不想用drupal_add_js,因爲這需要動態插入,我寧願不在線使用它(凌亂)。一個獨特的工具提示將基於提供的JS彈出,我需要實際的行ID。

在此先感謝!

回答

4

在Twitter上回復,但爲了其他遇到同樣情況的人(爲了澄清起見),我想我會在這裏轉發。

一般來說,我不會推薦views_php - 啓用/使用已經有discussed at length的PHP過濾器有許多缺點,並且當你真的不需要它時,它會增加另一個模塊的膨脹。在這種情況下,您仍然可以在預處理函數中使用drupal_add_js(),並保持動態充足。

總之,你有一個你需要綁定相同事件的元素列表。立刻想到了作爲可能的解決方案的Event delegation。事件處理程序不是現在的 n事件處理程序,而是爲您的父容器添加一個容器,這將使您的頁面更具響應能力。你不需要jQuery,但如果你喜歡使用.delegate()

至於如何從這個外部JS文件獲取ID,很簡單:確保它在源代碼標記中。假設您正在尋找 ID,您通常可以在每個行的「views-row-N」類中找到它。否則,您需要通過其他方式將類標識添加到模板中。在目標元素的事件處理程序(您的行,您的父元素中與.views-row匹配的元素)內部,解析您打算使用的類的ID,並根據您在其中找到的值執行腳本的其餘部分。

這種方法有許多好處:它少了一個模塊,少了一個安全問題,你的JS集中在一個地方,你綁定的事件處理程序更少,標記更輕,更易於閱讀,而事件委託意味着即使元素由於某種原因後來動態地添加到DOM中,該技術仍然可以工作。至於具體情況,這將有助於準確知道你打算如何處理彈出窗口。它是否正在對另一個節點進行AJAX調用?它是否根據列表中的位置進行了一些操作?我很樂意從那裏澄清我的答案。

0

您可能只是在尋找其中之一。這可能有點矯枉過正,但它可以完成這項工作:http://drupal.org/project/views_php

安裝該模塊,您將擁有全局:php字段的選項。您可以將JavaScript只發布到字段輸出中,並且不會被過濾掉。

+0

該模塊將值封裝在PHP標籤中,因此您無法輸出JS。 – ryanka

+1

不完全它有兩個輸入字段。準備和渲染。渲染只是你輸入的任何東西。準備假設它是php代碼。 http://files.clikbox.com/skitch/ARROJO_Academy_Subscription_Page_%28Content%29-20121011-104523.png – danielson317

+0

明白了,謝謝 – ryanka

相關問題