Điểm:0

Why does my JS file not get loaded?

lá cờ nl

I am a beginner with Drupal. I want to include a JavaScript file using a custom module.

I created the .libraries.yml file, hello_world.libraries.yml.

hello_world_js:
  js:
    js/basic.js: {}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

The module .info.yml file (hello_worl.info.yml) contains a reference to the library.

name: Hello World
type: module
description: Say Hello World
package: Custom
core: 8.x
libraries:
  - hello_world/hello_world_js

The JavaScript code in the basic.js file is the following one.

(function($,Drupal){
  Drupal.behaviors.addAccessionBehavior = {
    attach: function(context, settings){
      $(".query_button").click(function(){
        console.log("works");
      });
    }
  };
})(JQuery, Drupal);

When I click on a button using the .query_button CSS class, nothing happens and I don't know what the problem is.

leymannx avatar
lá cờ ne
Bạn cần đính kèm thư viện. Ngay bây giờ bạn chỉ tuyên bố nó. https://www.drupal.org/docs/drupal-apis/javascript-api/add-javascript-to-your-theme-or-module#s-attaching-the-file
Francisco Javier Valero Moreno avatar
lá cờ nl
khi tôi khai báo trong info.yml, nó có được đính kèm hoàn toàn với web không?
leymannx avatar
lá cờ ne
Trong một tập tin thông tin chủ đề, vâng. Trong tệp thông tin mô-đun, không. Các mô-đun không có phím `libraries:`. Bạn đã khai báo nó trong *.libraries.yml và bây giờ bạn cần đính kèm nó. Bạn không thể đính kèm thư viện trong tệp thông tin mô-đun.
Francisco Javier Valero Moreno avatar
lá cờ nl
tôi hiểu rồi, tôi đã làm điều này $build['#attached']['library'][] = 'hello_world/hello_world_js'; như ví dụ nhưng vẫn không hoạt động
leymannx avatar
lá cờ ne
Chính xác thì bạn đã thêm dòng mã này vào đâu? [`hello_world_page_attachments`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21theme.api.php/function/hook_page_attachments/8.3.x) trong hello_world.module?
Francisco Javier Valero Moreno avatar
lá cờ nl
Bây giờ tôi đã thêm vào hello_world.module, nhưng bây giờ tôi gặp một lỗi khác với ajax (?ajax_form=1&_wrapper_format=drupal_ajax: ajax.$form.ajaxSubmit không phải là chức năng) và một nút mà tôi chưa có trước đây, vì vậy tôi sẽ giả sử như bây giờ đang tải nhưng có gì đó không ổn, cảm ơn :D tôi sẽ cố gắng tìm ra lỗi là gì
lá cờ fr
Nói chung, mã của bạn có vẻ ổn. Rất nhiều lần các vấn đề như thế này là do tên hoặc vị trí tệp của bạn. Bạn đã khai báo tệp JavaScript là 'js/basic.js', có nghĩa là nó phải nằm trong thư mục con có tên 'js', vì vậy trong thư mục mô-đun cấp cao nhất, bạn phải có 'hello_world.info.yml' và 'hello_world. module' và thư mục 'js', trong khi ở thư mục 'js', bạn phải có 'basic.js'
Francisco Javier Valero Moreno avatar
lá cờ nl
vâng, tôi đã sửa, như câu trả lời bên dưới, tôi đã viết JQuery thay vì jQuery và điều đó gây ra lỗi cho tôi
Điểm:0
lá cờ de

Nếu bạn tìm trong bảng điều khiển JavaScript, bạn có thể biết thêm thông tin. Bạn có thể gặp lỗi trong bảng điều khiển có nội dung JQuery không được xác định. Điều này là do bạn đã khai báo JQuery nhưng biến là jQuery. Vì vậy, điều này:

})(JQuery, Drupal);

Nên thế này:

})(jQuery, Drupal);

Ngoài ra, khi bạn muốn kiểm tra xem tệp của mình đã được đính kèm hay chưa, bạn nên thêm lệnh gỡ lỗi trực tiếp vào behavior.attach(), thay vì một chức năng phụ yêu cầu nhấp chuột (như bạn đã thực hiện). Vì vậy, bạn có thể kiểm tra xem tập lệnh của mình đã được thêm như thế này chưa:

Drupal.behaviors.addAccessionBehavior = {
  đính kèm: chức năng (ngữ cảnh, cài đặt){
    console.log("hoạt động");
    $(".query_button").click(function(){
      // Làm mọi thứ khi nhấp chuột
    });
  }
};

Điều này sẽ ghi lại nội dung nào đó khi tải trang, cho bạn biết rằng tập lệnh đã được tải (và chứa các biến bắt buộc).

Francisco Javier Valero Moreno avatar
lá cờ nl
Vâng, trên thực tế, đó là nguyên nhân gây ra lỗi mà tôi gặp phải, cảm ơn bạn rất nhiều
Jaypan avatar
lá cờ de
Sau đó, hãy đánh dấu giải pháp của tôi là câu trả lời đú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.