2012-05-16 47 views
6

Tôi đang cố gắng để tạo ra một chủ đề trong Orchard và đã thêm một số kịch bản bao gồm trong cách bố trí của tôi:Trình tự javascript bao gồm trong Orchard

Script.Include("//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js").AtHead(); 
using (Script.Head()) { 
    @:<script>window.jQuery || document.write('<script src="scripts/jquery-1.7.1.min.js"><\/script>')</script> 
} 

Script.Include("plugins.js").AtHead(); 
Script.Include("script.js").AtHead(); 

Tôi muốn tải jQuery từ Google CDN nhưng có một dự phòng địa phương nếu không thể tải phiên bản CDN. Để đạt được điều này, tôi đã thêm khối tập lệnh ngay sau tập lệnh jQuery. Tuy nhiên, khi xem xét nguồn trang được tạo, có vẻ như:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" 
type="text/javascript"></script> 
<script src="/OrchardLocal/Themes/Test/scripts/plugins.js" type="text/javascript"> 
</script> 
<script src="/OrchardLocal/Themes/Test/scripts/script.js" type="text/javascript"> 
</script> 
<!--[if lt IE 9]> 
<script src="/OrchardLocal/Core/Shapes/scripts/html5.js" type="text/javascript">  
</script> 
<![endif]--> 
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>') 
</script> 

Vấn đề là dự phòng của tôi bây giờ là sau tất cả các tập lệnh khác, trong khi tôi muốn nó nằm ngay sau tập lệnh CDN jQuery bao gồm.

Có cách nào để tôi có thể kiểm soát nơi Orchard hiển thị khối tập lệnh nội tuyến không?

Trả lời

2

Dường như hiện tại không có cách nào để kiểm soát thứ tự của tập lệnh khi bạn đang trộn Script.Include() với Script.Head() hoặc Script.Foot().

Tuy nhiên, cách bạn có thể sử dụng CDN với Orchard. Nhưng, tiếc là nó không hoạt động như nó cần. Bạn có thể chỉ định Script.Require("jquery").AtHead().UseCdn() để xử lý những gì bạn đang cố gắng làm ở đây. Những phương pháp đã tồn tại, nhưng họ không làm việc cho 2 lý do:

  1. mô-đun jQuery hiện không xác định CDN URL
  2. Các phương pháp dựa trên UseCdn() phương pháp để tạo ra các kịch bản thẻ không hoạt động như họ nên

Đã có reported issue trên Orchard Codeplex cho sự cố này. Đội Orchard đã thay đổi trạng thái của nó thành Active để hy vọng, lỗi này sẽ sớm được giải quyết. Tôi đã bỏ phiếu về vấn đề này và vì vậy bạn có thể báo hiệu đội Orchard giải quyết lỗi này nhanh hơn một số lỗi khác. Trong khi chờ đợi, bạn có thể làm tương tự như tôi làm - thêm Document.cshtml mẫu vào chủ đề của bạn (bạn có thể sao chép nó từ /Core/Shapes/Views/Document.cshtml), tìm dòng này: @Display(Model.Head) (đây là nơi tất cả các tập lệnh và kiểu đầu của bạn) đi) và, cuối cùng, trên dòng đó, bạn có thể thêm mã này:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script>!window.jQuery && document.write('<script src="@Url.Content("~/Themes/[NAME-OF-YOUR-THEME]/Scripts/jquery-1.7.1.min.js")"><\/script>')</script> 

Và thay đổi [NAME-OF-YOUR-THEME] với tên thư mục của chủ đề của bạn.

Các vấn đề liên quan