0

在Sk8erPeter的大力帮助下,我设法在 Drupal 7 中执行有关节点创建和特定内容类型的节点更新的 Javascript 代码。

我现在的问题是我不能从这个模块的js文件中调用函数FB.api。它与 Javascript 命名空间有关吗?从控制台运行 FB.api() 函数可以正常工作...

提前感谢您的帮助。

尼尔斯

4

1 回答 1

0

根据您的评论...我只是在看您的,它甚至与我在另一个主题中testModule.behaviors.js写给您的功能看起来都不相似。

您当前的代码只是这样的:

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

在哪里Drupal.behaviorsattach我之前向您展示了它的功能?所有其他的东西在哪里?:)
当前代码输出错误甚至不足为奇,因为我认为这个 JavaScript 文件甚至在定义对象之前FB就已包含在内,这样您就可以直接在 header 中调用此代码。

我认为您的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 特定行为“包装器”的情况下调用),并将其内容更改为这个。


编辑:

好的,尝试使用以下命令将这个模块的权重设置为更高一次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'");
}
于 2012-06-02T21:19:55.883 回答