Score:2

การตอบสนอง AJAX ที่กำหนดเองไม่เริ่มทำงานเมื่อตั้งค่าสถานะ

ธง mw

ฉันกำลังพยายามเรียกใช้ฟังก์ชันจาวาสคริปต์ที่กำหนดเองพร้อมๆ กับที่ผู้คนโต้ตอบกับการตั้งค่าสถานะบางอย่างบนไซต์ของฉัน ฉันได้ติดตาม กวดวิชานี้ เกี่ยวกับวิธีตอบสนองต่อทั้งการดำเนินการตั้งค่าสถานะ/ยกเลิกการตั้งค่าสถานะ และ เว็บไซต์นี้ สำหรับวิธีตั้งค่าการตอบกลับ ajax ที่กำหนดเอง ยกเว้นว่าไม่สามารถรวมทั้งสองอย่างเข้าด้วยกันได้

รหัสภายในไฟล์ FlagSubscriber.php ของฉัน (จากลิงก์บทช่วยสอนแรก) มีลักษณะดังนี้

class FlagController ใช้ EventSubscriberInterface {

    ฟังก์ชั่นสาธารณะ onFlag (FlaggingEvent $event) {    
      dpm('ทดสอบข้อความ');

      $response = ใหม่ AjaxResponse();
      $response->addCommand(
        ใหม่ ExampleCommand()
      );
      ส่งคืน $response;
    } 

    /**
     * {@inheritdoc}
     */
    ฟังก์ชั่นคงที่สาธารณะ getSubscribedEvents () {
      กลับ [
        FlagEvents::ENTITY_FLAGGED => [['onFlag']]
      ];
    }
  }

มันเรียกใช้ข้อความ dpm ในครั้งต่อไปที่โหลดหน้าเว็บ แต่ดูเหมือนว่าจะไม่เรียกใช้การตอบสนอง Ajax ที่กำหนดเองของฉันเลย แม้ว่าฉันจะลองใช้มาตรฐานก็ตาม การตอบสนองของอาแจ็กซ์ จากที่นี่. มีบางที่ที่คุณไม่สามารถเรียกใช้คำขอ Ajax Response ประเภทนี้ได้หรือไม่

Score:1
ธง cn

เหตุการณ์การตั้งค่าสถานะไม่เกี่ยวข้องกับการตอบกลับ ดังนั้นคุณจึงไม่สามารถส่งคืนเหตุการณ์จากที่นั่นได้ วิธีการที่แตกต่างกันคือการ สร้างผู้สมัครสมาชิกเส้นทาง, และเปลี่ยน flag.action_link_flag และ flag.action_unlink_flag เส้นทาง แทนที่ตัวควบคุมด้วยตัวควบคุมที่คุณกำหนดเอง เช่น

ฟังก์ชันที่ได้รับการป้องกัน alterRoutes (RouteCollection $collection) {
  ถ้า ($route = $collection->get('flag.action_link_flag')) {
    $route->setDefault('_controller', 'Drupal\custom_module\Controller\CustomController::flag');
  }
  ถ้า ($route = $collection->get('flag.action_link_flag')) {
    $route->setDefault('_controller', 'Drupal\custom_module\Controller\CustomController::unflag');
  }
}

ตัวควบคุมที่กำหนดเองของคุณจะขยายตัวควบคุมแฟล็กเดิม (Drupal\flag\Controller\ActionLinkController) ใช้เมธอดเพื่อสร้างการตอบกลับดั้งเดิม แล้วต่อท้ายคำสั่ง JS ของคุณ

คลาส CustomController ขยาย ActionLinkController {

  ธงฟังก์ชันสาธารณะ (FlagInterface $flag, $entity_id) {
    $response = parent::flag($flag, $entity_id);
    $response->addCommand(...);
    ส่งคืน $response;
  }

  // เหมือนกันสำหรับการ unflag()

}

เพื่อความครอบคลุมทั้งหมด คุณอาจต้องทำสิ่งที่คล้ายกันกับ flag.action_link_flag_nojs และ flag.action_link_unflag_nojs เส้นทาง. แต่ถ้าฟังก์ชันการทำงานของคุณเป็น JS ล้วน ๆ และไม่จำเป็นต้องมีอยู่สำหรับผู้ใช้ที่ไม่มีฟังก์ชันดังกล่าว คุณก็ไม่จำเป็นต้องกังวล

Andrew Morris avatar
mw flag
น่าทึ่งมาก ฉันเพิ่งตั้งค่าทริกเกอร์ AJAX ที่กำหนดเองใหม่ซึ่งจะเริ่มทำงานทันทีที่ฉันกดปุ่ม ซึ่งเป็นสิ่งที่ฉันทำหลังจากนั้น ขอบคุณมากครับ :D

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา