从Drupal模块调用JavaScript函数?

时间:2015-07-17 16:19:46

标签: drupal

我是Drupal themer,我正在努力以我需要的方式修改模块。当事情发生时,我需要运行一个非常简单的JavaScript。我发现模块的一部分是负责任的,以下是有效的:

if (something = something else) {
  return array(
            '#commands' => array(

      // Hacky by works 
        ajax_command_append('body', 
        '<script>
            alert("Custom Js");
        </script>'),

    ),
  );
}
else {
  // Do something else 
}

然而,调用其他地方的函数会更好,因为其他模块会想要调用它。如何在此声明中从另一个模块调用函数?

1 个答案:

答案 0 :(得分:0)

你可以内联,就像这样

修改

在我的第一个回答中,我忘了在jQuery(document).ready(function() {})

中包装javascript

模块

if (something = something else) {

    // Inline fixed
    drupal_add_js("jQuery(document).ready(function() { alert('Script inline!'); });", "type" => "inline");        

    // From file
    drupal_add_js("myscript.js", "file");

  return array(
    '#commands' => array(
    ),
  );
}
else {
  // Do something else 
}

myscript.js

(function() {
    alert('Script from file!');
});

// or with jQuery
(function($) {
    // Do something with $
})(jQuery);

如果您希望javascript代码位于其自己的文件中,请执行此操作(从示例中获取)

查看documentation

中的示例

有关向模块/主题添加javascript的更多信息

Adding Javascript to your theme or module

Managing JavaScript in Drupal 7

修改2

您可以从模块调用javascript函数。我会这样做:

  • 创建一个只注入javascript代码的新模块。该模块的重量应该小于任何其他模块,因此它在任何模块之前执行。
  • 然后使用Drupal.settings从任何模块调用它。

假设您创建了模块,则应将javascript函数保存到Drupal.settings

(function ($) {
  Drupal.settings.exampleModule = {
    myFunction : function () {
        alert('My example function!');
    }
  };
}(jQuery));

这会将该代码注入settings,并且可供任何需要访问它的模块使用。

你的模块

if (something = something else) {

    // Inline fixed
    drupal_add_js("(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);", "type" => "inline"); 

}
else {
  // Do something else 
}

我就是这样做的。现在,如果你需要使用ajax框架,你应该做这样的事情(尝试一下,我以前从未使用过这个框架,所以我猜)

return array(
    '#commands' => array(

        // Hacky by works 
        ajax_command_append('body', "(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);"),

    ),
);