ड्रुपल के संलग्न व्यवहार: सभी नई भरी हुई सामग्री पर प्रतिक्रिया?


12

मुझे दो अलग-अलग मॉड्यूल मिले हैं जो कई तरीकों से एक साथ काम करते हैं। जिन चीजों पर वे एक साथ काम करते हैं उनमें से एक यह है कि मॉड्यूल ए AJAX के माध्यम से सामग्री को लोड करता है, और मॉड्यूल बी को इवेंट श्रोताओं को लोड की गई सामग्री को संलग्न करने की आवश्यकता होती है।

हालाँकि, ऐसा प्रतीत होता है कि जब मॉड्यूल ए के द्वारा AJAX के माध्यम से सामग्री लोड की जाती है, तो Drupal.behaviours.a का केवल 'अटैच' फ़ंक्शन ही लागू होता है, और Drupal.behaviours.b के 'अटैच' फ़ंक्शन को नहीं । दोनों कार्यों को पेज लोड पर लागू किया जाता है, लेकिन बाद में AJAX सामग्री लोड करने पर नहीं।

// This runs every time module A loads new content.
Drupal.behaviors.a = {
  attach: function(context, settings) {
    alert('a:attach');
  }
}

// This only runs on page load, but never when module A loads new content.
Drupal.behaviors.b = {
  attach: function(context, settings) {
    alert('b:attach');
  }
}    

हर बार किसी भी मॉड्यूल द्वारा नई सामग्री लोड करने पर मैं Drupal.behaviours.b का 'अटैच' फ़ंक्शन कैसे करता हूं ?


क्या आपने Drupal.attachBehaviors();अजाक्स सफलता कॉलबैक में जोड़ने की कोशिश की है ?
क्लाइव

नहीं, लेकिन क्या इसका स्वत: ध्यान नहीं रखा जाना चाहिए? मुझे लगा कि यह 'अटैच' फंक्शन का पूरा विचार है; यह पृष्ठ लोड और पृष्ठ अद्यतन पर कहा जाना चाहिए? हालाँकि, ऐसा लगता है कि इनवॉइसिंग मॉड्यूल के लिए केवल 'अटैच' फंक्शन को पेज अपडेट पर कहा जाता है?
सब्रतला

यह मेरी समझ में हाँ था, मैंने कभी भी इसे गहराई से नहीं देखा है। मुझे पता है कि कई बार जब AJAX कॉल के बाद मुझे व्यवहार को रीटच करने की आवश्यकता होती है, तो मुझे लगता है कि यह आवश्यक था
क्लाइव

Drupal.js को देखते हुए: "Drupal.attachBehaviors को jQuery के तैयार इवेंट में नीचे जोड़ा गया है और इसलिए प्रारंभिक पृष्ठ लोड पर चलता है। अपने समाधान में AHAH / Ajax को लागू करने वाले डेवलपर्स को इस फ़ंक्शन को नई सामग्री सामग्री लोड होने के बाद भी कॉल करना चाहिए, जिसमें फीडिंग होती है। नई सामग्री में सभी व्यवहारों को संलग्न करने के लिए, संसाधित होने वाला तत्व। " ऐसा लगता है कि मुझे खुद को संलग्न करने की आवश्यकता है। परंतु; यह मुझे याद दिलाता है कि मॉड्यूल A का 'अटैच' फंक्शन तब भी चलता है, जब मैंने AJAX सफलता की कॉलबैक में अटैचमेंट Behaviours नहीं लगाया हो ...? सिर्फ इनवॉइसिंग मॉड्यूल के लिए क्यों, और सभी मॉड्यूलों के लिए क्यों नहीं?
सब्रतला

1
यदि आप चाहते हैं एक कैच-ऑल समाधान $('body').ajaxSuccess(Drupal.attachBehaviors);शायद काम करेंगे
क्लाइव

जवाबों:


4

टिप्पणियों में से misc/drupal.js, यह बताता है कि यह कैसे काम करना चाहिए:

  • Drupal.attachBehaviors को jQuery के तैयार कार्यक्रम के नीचे जोड़ा गया है और इसी तरह
  • प्रारंभिक पृष्ठ लोड पर चलता है। डेवलपर्स AHAH / Ajax को अपने में लागू करते हैं
  • समाधान इस फ़ंक्शन को नई पृष्ठ सामग्री के बाद भी कॉल करना चाहिए
  • सभी को संलग्न करने के लिए, एक तत्व में भरा हुआ, संसाधित किया जाना चाहिए
  • नई सामग्री के लिए व्यवहार।

2

Drupal.behavior.b में इसे जोड़ने का प्रयास करें:

Drupal.attachBehaviors($(this));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.