Tình hình là đang convert theme của D6 sang D7 thì bị lỗi. Theme sử dụng Coda Slider chạy trên D6 thì ok, nhưng qua D7 thì bị lỗi $ is not a function. Đã khắc phục được nhờ vào video sau
http://www.youtube.com/watch?v=LStEhcpbKiU
Do ít làm việc với jQuery, càng ít làm việc với drupal + jQuery, vậy nhờ bạn nào giải thích giúp chuyện gì đã xãy ra vậy? Người làm video này giải thích gì mình không nghe được, nhưng video có ít.
Tóm tắt cái lỗi này như sau:
Trong file script .js mình có hàm
$(function() {
$("a").fadeOut();
});
Khi include script này thì sẽ nhận được lỗi $ is not a function
Cách giải quyết của Tom Rogers như sau:
var $ob = jQuery.noConflict()
$ob(function() {
$ob("a").fadeOut();
});
Có ai hiểu tại sao không? Và có cách nào khác không? Vì khi update file script này (thường là script của người ta) thì phải làm lại tất cả những chuyện này à?
Comments
Từ bản Drupal 7 sẽ không sử dụng $ làm alias cho jQuery nữa
Từ bản Drupal 7 mặc định sẽ sử dụng jQuery làm đối tượng chính để gọi jQuery với mục đích có thể đưa thêm vào sử dụng các bộ thư viện Javascript khác (Xem thêm: http://drupal.org/update/modules/6/7#javascript_compatibility). (Mặc định Drupal sẽ gọi hàm
jQuery.noConflict()) để phục hồi lại đối tượng $ đã có trước đó (Trường hợp của bạn là chưa có gì nên$ == undefined). Với các plugin tốt thì sự thay đổi này không ảnh hưởng.Còn với trường hợp của bạn, không nên tạo một alias khác ngoài $ hay jQuery vì bạn sẽ phải sửa rất nhiều và không cập nhật được. Bạn dùng hàm drupal_add_js để tạo lại alias cho jQuery coi sao:
drupal_add_js('$ = jQuery;', array('type' => 'inline', 'scope' => 'header', 'weight' => -10));--
Best regards,
Sang, Lê Thanh
Tel: +84 988079498
Email: me[at]sanglt.com
WWW: www.sanglt.com
Drupal đã dùng
Drupal đã dùng jQuery.noConflict() như vậy thì không nên cố gán lại làm gì. Bạn gọi đoạn mã vào như hướng dẫn ở cái link trên là ổn.
(function ($) {// cho đoạn mã cũ vào đây
})(jQuery);
:) đây là một cheat để cho
:) đây là một cheat để cho cái bạn đang hỏi không phải sửa lại mã nguồn của các thư viện bạn ấy đang sử dụng á. Mình có nói rõ là với các plugin viết tốt (Là viết theo mẫu bạn gởi) thì sẽ không phải làm gì. Ở đây khuyên bạn ấy sửa các thư viện bạn ấy sử dụng thì không hợp lý nên mình mới chỉ ra cách này.
--
Best regards,
Sang, Lê Thanh
Tel: +84 988079498
Email: me[at]sanglt.com
WWW: www.sanglt.com
Ko đúng !
=> Mới xem lại thấy mình gà quá :))
thong tin
[code]
(function ($) {
// cho đoạn mã cũ vào đây
})(jQuery);
[/code]
Cái này dùng để khai báo plugin chứ không dùng cho document ready
Mình thì khác, vì mình lập
Mình thì khác, vì mình lập trình tối ưu nên mình gom hết cả mả chúng nó vào 1 file , không cho drupal can thiệp vào nữa, sửa gì tuỳ ý mình hết nên core đỡ nặng một khoản render JS ! Mà lại chả lỗi, úp down thoải mái ...
My blog: Jamviet.com, Hỏi đáp trực tuyến, váy dài
Drupal 6 không bị sao
Drupal 6 thì nó đã tự fix lỗi này bạn nhé
Mình đã cài đặt lại với phiên bản mới và thành công
máy bơm chìm| máy bơm ebara | máy bơm tsurumi
Ok, mình đã hiểu. Cảm ơn bạn
Ok, mình đã hiểu.
Cảm ơn bạn nhiều!