Score:0

วิธีที่ถูกต้องในการโหลดไลบรารี JavaScript คืออะไร

ธง ae

ฉันกำลังพยายามแสดงข้อมูลในแบบฟอร์มเป็นแผนภูมิเส้น ฉันใช้ Drupal 9 ใน Lando ฉันใช้แผนภูมิ 5.0.x กับโมดูลย่อย Highcharts ฉันติดตั้งไลบรารี Highcharts JS โดยใช้ผู้แต่ง นี่คือรหัสที่เกี่ยวข้อง

.libraries.yml

แผนภูมิสูง:
  จส:
    /libraries/highcharts/highcharts.js: { }
  การพึ่งพา:
    - แกน / jquery

.โมดูล

ฟังก์ชั่น stats_degrees_theme () {
  กลับ [
    'mychart_template' => [
      'ตัวแปร' => ['chart_var' => NULL],
    ]
  ];
}

.routing.yml

stats_degrees.render_form:
  เส้นทาง: '/statistics/stats-degrees'
  ค่าเริ่มต้น:
    _title: 'ปริญญาวิศวกรรมศาสตร์และวิทยาศาสตร์กายภาพที่ได้รับจากสมาชิกของกลุ่มที่ด้อยโอกาส'
    _form: '\Drupal\stats_degrees\Form\StatsDegreesForm'
  ความต้องการ:
      _permission: 'เข้าถึงเนื้อหา'

.html.twig

{# stats_degrees/templates/mychart-template.html.twig #}
{{ Attach_library('stats_degrees/highcharts') }}

<div id='คอนเทนเนอร์' สไตล์='ความกว้าง:100%;ความสูง:100%;'>
  {{ แผนภูมิ_var | ดิบ }}
</div>

ตัวจัดการการส่ง

ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) { 
   $form_state->setRebuild();
  }

ตัวสร้างแบบฟอร์ม

 ถ้า ($form_state->isRebuilding()) {
   // รับข้อมูลแบบฟอร์มและสร้างแผนภูมิ
    // รับเทมเพลตกิ่งไม้
      $form['#theme'] = 'mychart_template';
      $form['#attached'] = อาร์เรย์(
        'library' => array('stats_degrees/highcharts')
      );
      $form['#chart_var'] = $rendered_chart;
  }

เทมเพลตแสดงผลโดยไม่มีแผนภูมิ เมื่อฉันดูที่มาร์กอัป HTML ฉันเห็นโค้ดแผนภูมิที่แสดงผลใน chart_var และนี่อยู่ในคอนโซล

Uncaught ReferenceError: Highcharts ไม่ได้กำหนดไว้ที่ js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:4396
js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:128 Uncaught TypeError: $(...).highcharts ไม่ใช่ฟังก์ชันที่ HTMLDivElement
[ไม่ระบุชื่อ] (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:4373
ที่ Function.each (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:2)
ที่ S.fn.init.each (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:2)
ที่ Object.attach (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:4370)
ที่ js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:139
ที่ Array.forEach ()
ที่ Object.Drupal.attachBehaviors (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:136)
ที่ js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:365
ที่ HTMLDocument.listener (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:353)

เมื่อฉันเจาะลึกข้อผิดพลาด ฉันเห็นว่ามันล้มเหลวที่นี่

(Highcharts)})(ฟังก์ชัน(w){(ฟังก์ชัน(b){ฟังก์ชัน r(b,a){this.init(b,a)} var v=b.CenteredSeriesMixin,u=b.each,n=b .extend,q=b.merge,g=b.splat;n(r.prototype,{coll:"pane",init:function(b,a){this.chart=a;this.background=[]; a.pane.push(this);this.setOptions(b)},setOptions:function(b){this.options=q(this.defaultOptions,this.chart.angular?{background:{}}:void 0, b)},render:function(){var b=this.options,a=this.options.background,c=this.chart.renderer;

ฉันโหลดไลบรารี Highcharts ถูกต้องหรือไม่

Jaypan avatar
de flag
คุณล้างรีจิสทรีแล้วหรือยัง `highcharts.js` แสดงในซอร์ส HTML หรือไม่ เส้นทางไปยัง `highcharts.js` ในซอร์ส HTML ถูกต้องหรือไม่
cn flag
ใช่ ตรวจสอบเส้นทางอย่างแน่นอน ไฟล์ JS อยู่ในโฟลเดอร์ /code โดยค่าเริ่มต้น ดังนั้นเส้นทางอาจผิดคุณไม่จำเป็นต้องลงทะเบียนไลบรารีด้วยตัวคุณเอง BTW โมดูลย่อยจะทำเช่นนั้น (ดูที่ charts_highcharts.libraries.yml) สมมติว่าเส้นทางไปยัง JS นั้นถูกต้องและกำลังโหลดอยู่ ฉันคิดว่าคำถามต่อไปคือ `$rendered_chart` ประกอบด้วยอะไร
Dorian Winterfeld avatar
ae flag
ฉันได้ล้างรีจิสทรี highcharts.js อยู่ภายใต้ /libraries/highcharts/ นั่นคือสิ่งที่ผู้แต่งติดตั้งไว้ เมื่อฉันดูแหล่งที่มา การอ้างอิงเดียวไปยังแผนภูมิระดับสูงที่ฉันเห็นนั้นอยู่ใกล้ด้านล่าง
Dorian Winterfeld avatar
ae flag
$render_chart ยาวเกินไปสำหรับความคิดเห็นนี้ แต่เริ่มต้นด้วย
Score:0
ธง rs

ดูเหมือนว่าสิ่งที่เกิดขึ้นคือคุณต้องเพิ่ม 'charts_highcharts/highcharts' เป็นการอ้างอิง เช่น:

แผนภูมิสูง:
  จส:
    /libraries/highcharts/highcharts.js: { }
  การพึ่งพา:
    - แกน / jquery
    - charts_highcharts/highcharts

(หากไม่ได้ผล ให้ลองใช้ 'charts_highcharts/charts_highcharts' แทน 'charts_highcharts/highcharts')

Dorian Winterfeld avatar
ae flag
ขออภัย ฉันได้รับพฤติกรรมเดียวกันกับข้อความแสดงข้อผิดพลาด "Uncaught Reference Error: Highcharts is not reserved"
Dorian Winterfeld avatar
ae flag
ติดตาม; ข้อผิดพลาด JS เกิดขึ้นเมื่อเข้าสู่ระบบเท่านั้น เช่น แผนภูมิแสดงเมื่อออกจากระบบเท่านั้น เมื่อฉันเปลี่ยนธีมจาก Bartik เป็น Claro ปัญหานั้นก็ได้รับการแก้ไขเช่นกัน ขณะนี้แผนภูมิจะแสดงเมื่อเข้าสู่ระบบหรือไม่

โพสต์คำตอบ

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