js_init_call ให้ไม่สามารถเรียกเมธอด 'init' จากที่ไม่ได้กำหนดในปลั๊กอินบล็อก Moodle

ฉันมีปลั๊กอิน Moodle Block ที่ฉันพยายามรวม JavaScript ไว้ในหน้าเว็บ

ไม่ว่าฉันจะลองอย่างไร javascript ที่เรียกโดย js_init_call มักจะแสดงข้อผิดพลาดแทนที่จะทำงาน ฉันได้ลองส่งอาเรย์แบบเต็มไปที่ js_init_call และฉันได้ลองใช้รูปแบบชวเลขที่ถือว่าไฟล์นั้นเรียกว่า module.js

หากไฟล์จาวาสคริปต์ ไม่มี อยู่ ฉันได้รับข้อผิดพลาด Moodle ที่แจ้งเกี่ยวกับไฟล์ที่หายไป หาก ไม่มี อยู่ ฉันได้รับข้อผิดพลาดจาวาสคริปต์ดังที่กล่าวข้างต้น ผมทำอะไรผิดหรือเปล่า?

block_foo.php:

<?php
class block_foo extends block_base {
    public function init() {
    $this->title = get_string('foo', 'block_foo');
    }

    public function applicable_formats(){
        return array('course-view' => true);
    }

    public function get_content() {
        global $PAGE;
        if ($this->content !== null) {
          return $this->content;
        }

        if(!isloggedin()){
        //if(!is_enrolled()){
            return false;
        }
        $this->content         =  new stdClass;
        $this->content->text = 'asdf';
        $this->content->footer = '';

        $jsmodule = array(
            'name'     => 'block_foo',
            'fullpath' => '/blocks/foo/foo.js',
            'requires' => array(),
            'strings' => array()
        );
        $PAGE->requires->js_init_call('M.block_foo.init', null, false, $jsmodule);

        //This style of call doesn't work either... (if the js is named module.js)
        //$PAGE->requires->js_init_call('M.block_foo.init', null);

        return $this->content;
    }

    function hide_header(){
        return true;
    }
}

module.js หรือ foo.js:

M.block_foo = {};
M.block_foo.init = function(){
    alert("I was called, yay");
    $var = 1234;
    $var = $var + 3;
};

person Zxaos    schedule 22.10.2012    source แหล่งที่มา


คำตอบ (2)


ปัญหานี้ท้ายที่สุดมีสาเหตุมาจาก Moodle ตอบสนองด้วยการตอบสนอง HTTP/200 ขนาด 0 ต่อคำขอไฟล์จาวาสคริปต์

ดูเหมือนว่าการตอบสนองดังกล่าวมีสาเหตุมาจากโมดูลที่เป็นเพียงลิงก์สัญลักษณ์ไปยังไดเร็กทอรีการพัฒนาของฉันแทนที่จะเป็นสำเนาของไฟล์จริง เหตุใดสิ่งนี้จึงเกิดขึ้นกับไฟล์จาวาสคริปต์เท่านั้น ไม่ใช่ไฟล์ php ฉันไม่รู้

ดังนั้นอย่าพัฒนาโมดูล Moodle แล้วจึงเชื่อมโยงโมดูลเหล่านั้นเข้าที่

person Zxaos    schedule 25.10.2012
comment
น่าหงุดหงิดแค่ไหน. ฉันใช้เวลาหลายชั่วโมงในการพยายามแก้ไขปัญหานี้ ฉันพัฒนาด้วย Symlink และสะดวกมากที่จะสามารถแก้ไขไฟล์ของฉันและให้ Moodle หยิบมันขึ้นมาได้ทันที - person Jonathan; 22.01.2013
comment
@Jonathan ฉันก็เหมือนกัน! เนื่องจากฉันไม่คุ้นเคยกับการพัฒนา Moodle ฉันจึงมั่นใจว่าฉันกำลังทำอะไรผิดและเสียเวลา นาน กับปัญหานี้ - person Zxaos; 24.01.2013

ฉันรู้ว่านี่เป็นคำถามเก่า แต่สำหรับการอ้างอิงในอนาคต ให้ใช้ 'fullpath' => new moodle_url($CFG->wwwroot.'/blocks/foo/foo.js'), แล้วคุณจะไม่มีปัญหากับลิงก์สัญลักษณ์

person PaulK    schedule 22.05.2014