2012-06-02 48 views
0

隨着great help of Sk8erPeter我設法在Drupal上的某些內容類型的節點創建和節點更新執行JavaScript代碼現在7呼叫全球JS功能模塊從.js文件在Drupal 7

我的問題是,我可以不要使用這個模塊的js文件調用函數FB.api。它與Javascript命名空間有關嗎?從運行控制檯FB.api()函數的任何幫助工作得很好......

在此先感謝。

尼爾斯

+0

尼爾斯嗨!我也問了它的另一話題,但是否有調用從你的代碼開發工具的'Console'標籤此功能時,任何錯誤信息(如瀏覽器內置的東西或螢火蟲)? :)或者什麼是「錯誤」的症狀?你能告訴我們你調用這個函數的整個代碼嗎? – Sk8erPeter

+0

@ Sk8erPeter,只是打電話doitnow()與你的榜樣警報工程完全沒有任何錯誤。不起作用的是從另一個稱爲FB.api()的模塊調用另一個函數。我可以從控制檯運行這個Fb.api函數,沒有任何錯誤。但在doitnow()函數中,它似乎是未知的。在控制檯中根據錯誤是「FB沒有定義@ http://www.share-a-tear.com/sites/all/modules/testModule/js/testModule.behaviors.js?m4zq9p:1」。 – Nils

+0

這是我真正想要的內部doitnow()調用函數: FB.api( '/ ME/shareatear:股', '後', {淚:document.URL}, 功能(響應){ 如果{ 警報( '發生錯誤');} (響應|| response.error!)其他{ 警報('工作。'+ response.id); } }); – Nils

回答

0

您的意見基於...我只是看你testModule.behaviors.js,它甚至沒有類似於我給你寫here in the other topic功能。

您當前的代碼只是這樣的:

FB.api(
    '/me/shareatear:share', 
    'post', 
    { tear: document.URL }, 
    function(response) { 
     if (!response || response.error) { 
      alert('Error occured'); 
     } else { 
      alert('done. ' + response.id); 
     } 
    }); 

哪裏是Drupal.behaviors,其attach功能我教你的?其他所有東西在哪裏? :)
它甚至不是令人驚訝的是當前的代碼輸出錯誤,因爲我覺得這個JavaScript文件包含之前甚至定義FB對象,這樣你就直接在頭調用此代碼。

我覺得你testModule.behaviors.js文件應該是這樣的(基於我們談論以前的代碼):

(function ($) { 
    Drupal.behaviors.testModule = { 
     doitnow: function() { 
      alert("A new \"tear\" content has just been added!"); 

      // change this code to the appropriate one 
      FB.api('/me/shareatear:share', 'post', { 
       tear: document.URL 
      }, function (response) { 
       if (!response || response.error) { 
        alert('Error occured'); 
       } else { 
        alert('done. ' + response.id); 
       } 
      }); 

     }, 

     attach: function (context, settings) { 
      try { 
       if (settings.testModule.tear_just_added) { 
        this.doitnow(); 
       } 
      } catch (ex) {} 
     } 
    }; 
})(jQuery); 

所以替換當前的內容(你只調用FB.api沒有任何Drupal-specific behaviors「包裝」 ),並將其內容更改爲這一個。


編輯:

OK,請嘗試使用以下db_query()更高一旦設置此模塊的重量,所以它的鉤子獲得比其它模塊的鉤子後調用。在代碼中放入這些行後,保存文件,刪除Drupal緩存,然後註釋掉相應的行!無需在每次加載頁面時都一直運行!

/** 
* Implements hook_init() 
* @see http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_init/7 
*/ 
function testModule_init() { 
    // after putting this in your file, save it, delete cache, then COMMENT OUT THE FOLLOWING LINE!!! It should only RUN ONCE (it's enough). 
    db_query("UPDATE {system} SET weight = 111 WHERE type = 'module' AND name = 'testModule'"); 
} 
+0

hi @ Sk8erPeter,我先試着給你初始代碼。但是在這個版本中,FB()函數仍然無法加載。警報出現,但加載FB.api失敗。當我從這段代碼中只將FB.api函數複製到控制檯時,它工作正常......所以我們開始代碼太早了?以後如何啓動它? – Nils

+0

@Nils:我編輯了我的答案,請在帖子末尾查看模塊重量變化方法。 – Sk8erPeter

+0

@Nils:你是否設法解決這個問題? – Sk8erPeter