it-swarm.com.de

Rufen Sie eine drupal Verhaltensmethode aus einem anderen Verhalten heraus auf

Wie ruft man eine drupal Verhaltensmethode aus einem anderen Verhalten heraus auf? Mein Beispiel unten

(function ($) {
  Drupal.behaviors.exampleOne = {
    attach: function (context, settings) {
      $('.example', context).click(function () {
          $(this).next('ul').toggle('show');
      });
    }

    exampleMethod: function (context) {
      console.log('test');
    }
  };

  // call exampleOne from inside exampleTwo
  Drupal.behaviors.exampleTwo = {
    attach: function (context, settings) {
      $('.example-link', context).click(function () {
          Drupal.behaviors.exampleOne.exampleMethod(context);
      });
    }
  };
})(jQuery);

Sehen Sie, wie ich versuche, exampleMethod() aufzurufen, das zum Verhaltensbeispiel gehört. Ich würde denken, ich kann es so nennen, aber ich bekomme immer wieder undefined, wenn ich es nenne. Wenn ich es so nenne console.log(Drupal.behaviors.exampleOne.exampleMethod);, bekomme ich die Funktion ausgeschrieben.

6
Jorge Calderon

Arbeitsbeispiel von https://web.archive.org/web/20150320092121/http://dropbucket.org/node/94 :

1. ) Be sure you have included JS files in your Drupal module files.

  $form['#attached']['js'][] = drupal_get_path('module', 'module_A') . '/module_A.js';
  $form['#attached']['js'][] = drupal_get_path('module', 'module_B') . '/module_B.js';

2. ) module_A.js file

(function ($) {
  Drupal.behaviors.module_A = {};
  Drupal.behaviors.module_A.my_function = function(selector) {
    // Your code.
  }
})(jQuery);

3. ) Call the function in module_B.js file
(function ($) {
   Drupal.behaviors.module_B = {};
   Drupal.behaviors.module_B.attach = function(context) {

   // This is the main part here. You have to respect the namespace of module A.
   Drupal.behaviors.module_A.my_function('.my-selector');
  }
})(jQuery);
6
lnah

Dies hat nichts mit Drupal zu tun. Es ist rein verwandt mit JavaScript Closures/Scope. Wenn Sie eine Methode in JavaScript aufrufen möchten, sollte sie entweder im aktuellen Bereich (Closure) oder im globalen Bereich verfügbar sein.

Aus diesem Grund werden Sie undefiniert, wenn Sie die exampleMethod aus einem anderen Bereich aufrufen.

Überprüfen Sie die folgenden Referenzen für weitere Informationen

1
Mathankumar