在Sk8erPeter的大力帮助下,我设法在 Drupal 7 中执行有关节点创建和特定内容类型的节点更新的 Javascript 代码。
我现在的问题是我不能从这个模块的js文件中调用函数FB.api。它与 Javascript 命名空间有关吗?从控制台运行 FB.api() 函数可以正常工作...
提前感谢您的帮助。
尼尔斯
在Sk8erPeter的大力帮助下,我设法在 Drupal 7 中执行有关节点创建和特定内容类型的节点更新的 Javascript 代码。
我现在的问题是我不能从这个模块的js文件中调用函数FB.api。它与 Javascript 命名空间有关吗?从控制台运行 FB.api() 函数可以正常工作...
提前感谢您的帮助。
尼尔斯
根据您的评论...我只是在看您的,它甚至与我在另一个主题中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.behaviors
,attach
我之前向您展示了它的功能?所有其他的东西在哪里?:)
当前代码输出错误甚至不足为奇,因为我认为这个 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'");
}