Điểm:0

Cách chính xác để tải thư viện JavaScript là gì?

lá cờ ae

Tôi đang cố hiển thị dữ liệu biểu mẫu dưới dạng biểu đồ đường. Tôi đang chạy Drupal 9 ở Lando. Tôi đang sử dụng Charts 5.0.x với mô hình con Highcharts. Tôi đã cài đặt thư viện Highcharts JS bằng trình soạn thảo. Đây là mã có liên quan.

.libraries.yml

bảng xếp hạng cao:
  js:
    /libraries/highcharts/highcharts.js: { }
  phụ thuộc:
    - lõi/jquery

.module

chức năng thống kê_độ_theme() {
  trở lại [
    'mychart_template' => [
      'biến' => ['chart_var' => NULL],
    ],
  ];
}

.routing.yml

stats_độs.render_form:
  đường dẫn: '/statistic/stats-độ'
  mặc định:
    _title: 'Bằng cấp Khoa học Vật lý và Kỹ thuật do Thành viên của các Nhóm Thiếu đại diện kiếm được'
    _form: '\Drupal\stats_degrees\Form\StatsDegreesForm'
  yêu cầu:
      _permission: 'truy cập nội dung'

.html.twig

{# stats_độ/mẫu/mychart-template.html.twig #}
{{ attachment_library('stats_degrees/highcharts') }}

<div id='container' style='width:100%;height:100%;'>
  {{ chart_var | nguyên }}
</div>

trình xử lý đệ trình

hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) { 
   $form_state->setRebuild();
  }

Trình tạo Mẫu

 nếu ($form_state->isRebuilding()) {
   // lấy dữ liệu từ form và xây dựng biểu đồ
    // lấy mẫu cành cây
      $form['#theme'] = 'mychart_template';
      $form['#attached'] = mảng(
        'thư viện' => mảng ('stats_degrees/highcharts')
      );
      $form['#chart_var'] = $rendered_chart;
  }

Mẫu được hiển thị mà không có biểu đồ. Khi tôi nhìn vào phần đánh dấu HTML, tôi thấy mã biểu đồ được hiển thị trong chart_var và mã này nằm trong bảng điều khiển.

Uncaught ReferenceError: Highcharts không được xác định tại js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:4396
js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:128 Uncaught TypeError: $(...).highcharts không phải là một chức năng tại HTMLDivElement.
[ẩn danh] (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:4373
tại Function.each (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:2)
tại S.fn.init.each (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:2)
tại Object.attach (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:4370)
tại js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:139
tại Array.forEach ()
tại Object.Drupal.attachBehaviors (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:136)
tại js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:365
tại HTMLDocument.listener (js_fLkad5FjTCYgrjWIVyhfUxVUTz4-TXopB2EJOzHz820.js:353)

Khi tôi đi sâu vào lỗi, tôi thấy nó bị lỗi ở đây.

(Highcharts)})(function(w){(function(b){function 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;

Tôi có đang tải thư viện Highcharts chính xác không?

Jaypan avatar
lá cờ de
Bạn đã xóa sổ đăng ký chưa? `highcharts.js` có hiển thị trong nguồn HTML không? Đường dẫn đến `highcharts.js` trong nguồn HTML có chính xác không?
lá cờ cn
Có, chắc chắn kiểm tra đường dẫn, các tệp JS nằm trong thư mục/code theo mặc định nên đường dẫn có thể sai.Bạn không cần phải tự đăng ký thư viện BTW, mô hình con sẽ làm điều đó (xem chart_highcharts.libraries.yml). Giả sử đường dẫn đến JS là đúng và đang được tải, tôi nghĩ câu hỏi tiếp theo sẽ là `$rendered_chart` chứa gì?
Dorian Winterfeld avatar
lá cờ ae
Tôi đã xóa sổ đăng ký. highcharts.js nằm trong /libraries/highcharts/. Đó là nơi nhà soạn nhạc đã cài đặt nó. Khi tôi xem nguồn tham chiếu duy nhất đến highcharts mà tôi thấy nó ở gần cuối bên dưới
Dorian Winterfeld avatar
lá cờ ae
$render_chart quá dài cho nhận xét này nhưng nó bắt đầu bằng
Điểm:0
lá cờ rs

Có vẻ như điều đang xảy ra là bạn cần thêm 'charts_highcharts/highcharts' làm phần phụ thuộc, như sau:

bảng xếp hạng cao:
  js:
    /libraries/highcharts/highcharts.js: { }
  phụ thuộc:
    - lõi/jquery
    - chart_highcharts/highcharts

(Nếu cách này không hiệu quả, hãy thử 'charts_highcharts/charts_highcharts' thay vì 'charts_highcharts/highcharts')

Dorian Winterfeld avatar
lá cờ ae
Thật không may, tôi đang gặp phải hành vi tương tự với cùng một thông báo lỗi "Lỗi tham chiếu chưa được xử lý: Highcharts không được xác định".
Dorian Winterfeld avatar
lá cờ ae
Theo sát; các lỗi JS chỉ xảy ra khi đăng nhập, tức là biểu đồ chỉ hiển thị khi đăng xuất. Khi tôi chuyển chủ đề từ Bartik sang Claro, vấn đề đó cũng đã được giải quyết. Biểu đồ hiện hiển thị khi đăng nhập hay không.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.