Assets¶
Quản lý tài sản trong SoOn không đơn giản như trong một số ứng dụng khác. Một trong những lý do là chúng ta có nhiều tình huống yêu cầu một số nhưng không phải tất cả tài sản. Ví dụ: nhu cầu của khách hàng web, ứng dụng điểm bán hàng, trang web hoặc thậm chí ứng dụng di động là khác nhau. Ngoài ra, một số nội dung có thể lớn nhưng hiếm khi cần thiết: trong trường hợp đó, chúng tôi có thể muốn chúng loaded một cách lười biếng (theo yêu cầu).
Loại tài sản¶
Có ba loại nội dung khác nhau: mã (tệp js
), kiểu (tệp css
hoặc scss
) và mẫu (tệp xml
).
- Mã số
SoOn hỗ trợ ba loại tệp javascript khác nhau. Sau đó, tất cả các tệp này sẽ được xử lý (các mô-đun JS gốc được chuyển đổi thành các mô-đun odoo), sau đó được rút gọn (nếu không có trong
debug=assets
mode) và được ghép nối. Kết quả sau đó được lưu dưới dạng tệp đính kèm. Các tệp đính kèm này thường được tải thông qua thẻ<script>
trong phần<head>
của trang (dưới dạng tệp tĩnh).- Phong cách
Việc tạo kiểu có thể được thực hiện bằng
css
hoặc scss. Giống như các tệp javascript, các tệp này được xử lý (các tệpscss
được chuyển đổi thànhcss
), sau đó được rút gọn (một lần nữa, nếu không ở dạngdebug=assets
mode) và nối. Kết quả sau đó được lưu dưới dạng tệp đính kèm. Sau đó, chúng thường được tải thông qua thẻ<link>
trong phần<head>
của trang (dưới dạng tệp tĩnh).- Bản mẫu
Các mẫu (tệp
xml
tĩnh) được xử lý theo một cách khác: chúng chỉ được đọc từ hệ thống tệp bất cứ khi nào chúng cần và được nối với nhau.Bất cứ khi nào trình duyệt tải odoo, nó sẽ gọi bộ điều khiển
/web/webclient/qweb/
để tìm nạp templates.
Thật hữu ích khi biết rằng trong hầu hết các trường hợp, trình duyệt chỉ thực hiện yêu cầu vào lần đầu tiên tải trang. Điều này là do mỗi nội dung này được liên kết với tổng kiểm tra, được đưa vào nguồn trang. Tổng kiểm tra sau đó được thêm vào url, điều đó có nghĩa là có thể đặt tiêu đề bộ nhớ đệm trong một khoảng thời gian dài một cách an toàn.
Bó¶
Assets SoOn được nhóm theo gói. Mỗi gói (một danh sách các đường dẫn tệp thuộc các loại cụ thể: xml
, js
, css
hoặc scss
) được liệt kê trong moduleManifest. Các tệp có thể được khai báo bằng cú pháp glob, nghĩa là bạn có thể khai báo một số tệp nội dung bằng một dòng duy nhất.
Các gói được xác định trong __manifest__.py
của mỗi mô-đun, với khóa assets
chuyên dụng chứa từ điển. Từ điển ánh xạ các tên gói (khóa) vào danh sách các tệp mà chúng chứa (giá trị). Nó trông như thế này:
'assets': {
'web.assets_backend': [
'web/static/src/xml/**/*',
],
'web.assets_common': [
'web/static/lib/bootstrap/**/*',
'web/static/src/js/boot.js',
'web/static/src/js/webclient.js',
'web/static/src/xml/webclient.xml',
],
'web.qunit_suite_tests': [
'web/static/src/js/webclient_tests.js',
],
},
Dưới đây là danh sách một số gói quan trọng mà hầu hết các nhà phát triển odoo sẽ cần biết:
web.assets_common
: gói này chứa hầu hết các nội dung chung cho ứng dụng khách web, trang web và cả điểm bán hàng. Điều này được cho là chứa các khối xây dựng cấp thấp hơn cho khung odoo. Lưu ý rằng nó chứa tệpboot.js
, tệp này xác định hệ thống mô-đun odoo.web.assets_backend
: gói này chứa mã dành riêng cho máy khách web (đặc biệt là máy khách web/trình quản lý hành động/chế độ xem/mẫu XML tĩnh)web.assets_frontend
: gói này nói về tất cả những gì dành riêng cho trang web công cộng: thương mại điện tử, cổng thông tin, diễn đàn, blog, ...web.qunit_suite_tests
: tất cả mã kiểm tra qunit javascript (kiểm tra, trợ giúp, mô phỏng)web.qunit_mobile_suite_tests
: mã kiểm tra qunit dành riêng cho thiết bị di động
Hoạt động¶
Thông thường, việc xử lý nội dung rất đơn giản: bạn chỉ cần thêm một số tệp mới vào gói được sử dụng thường xuyên như assets_common
hoặc assets_backend
. Tuy nhiên, vẫn có các thao tác khác có thể đáp ứng một số trường hợp sử dụng cụ thể hơn.
Lưu ý rằng tất cả các lệnh nhắm mục tiêu đến một tệp nội dung nhất định (ví dụ: trước
, sau
, thay thế
và xóa
) đều cần phải khai báo trước tệp đó, trong các bảng kê khai cấp cao hơn trong hệ thống phân cấp hoặc trong ``ir.asset `` các bản ghi có trình tự thấp hơn.
chắp thêm
¶
Thao tác này thêm một hoặc nhiều tệp. Vì đây là thao tác phổ biến nhất nên có thể thực hiện bằng cách sử dụng tên tệp:
'web.assets_common': [
'my_addon/static/src/js/**/*',
],
Theo mặc định, việc thêm một chuỗi đơn giản vào gói sẽ nối thêm các tệp khớp với mẫu hình cầu ở cuối gói. Rõ ràng, mẫu cũng có thể trực tiếp là một đường dẫn tệp duy nhất.
trả trước
¶
Thêm một hoặc nhiều tệp vào đầu gói.
Hữu ích khi bạn cần đặt một tệp nhất định trước các tệp khác trong một gói (ví dụ: với các tệp css). Thao tác prepend
được gọi theo cú pháp sau: ('prepend', <path>)
.
'web.assets_common': [
('prepend', 'my_addon/static/src/css/bootstrap_overridden.scss'),
],
trước
¶
Thêm một hoặc nhiều tệp trước một tệp cụ thể.
Việc chuẩn bị trước một tệp ở đầu gói có thể không đủ chính xác. Lệnh trước
có thể được sử dụng để thêm (các) tệp đã cho ngay trước tệp đích. Nó được khai báo bằng cách thay thế đường dẫn thông thường bằng bộ dữ liệu 3 phần tử ('trước', <target>, <path>)
.
'web.assets_common': [
('before', 'web/static/src/css/bootstrap_overridden.scss', 'my_addon/static/src/css/bootstrap_overridden.scss'),
],
sau
¶
Thêm một hoặc nhiều tệp sau một tệp cụ thể.
Tương tự như trước
, với (các) tệp phù hợp được thêm vào ngay sau tệp đích. Nó được khai báo bằng cách thay thế đường dẫn thông thường bằng bộ 3 phần tử ('after', <target>, <path>)
.
'web.assets_common': [
('after', 'web/static/src/css/list_view.scss', 'my_addon/static/src/css/list_view.scss'),
],
bao gồm
¶
Sử dụng các gói lồng nhau.
Lệnh include
là cách sử dụng một gói trong các gói khác để giảm thiểu kích thước tệp kê khai của bạn. Trong SoOn, chúng tôi sử dụng các gói phụ (có tiền tố là dấu gạch dưới theo quy ước) cho các tệp bó được sử dụng trong nhiều gói khác. Sau đó, bạn có thể chỉ định gói phụ thành một cặp ('include', <bundle>)
như thế này:
'web.assets_common': [
('include', 'web._primary_variables'),
],
xóa
¶
Xóa một hoặc nhiều tệp.
Trong một số trường hợp, bạn có thể muốn xóa một hoặc nhiều tệp khỏi một gói. Điều này có thể được thực hiện bằng cách sử dụng lệnh remove
bằng cách chỉ định một cặp ('remove', <target>)
:
'web.assets_common': [
('remove', 'web/static/src/js/boot.js'),
],
thay thế
¶
Thay thế tệp nội dung bằng một hoặc nhiều tệp.
Giả sử rằng một nội dung không chỉ cần được xóa mà bạn còn muốn chèn phiên bản mới của nội dung đó vào cùng một vị trí chính xác. Điều này có thể được thực hiện bằng lệnh replace
, sử dụng bộ dữ liệu 3 phần tử ('replace', <target>, <path>)
:
'web.assets_common': [
('replace', 'web/static/src/js/boot.js', 'my_addon/static/src/js/boot.js'),
],
Đang tải đơn hàng¶
Thứ tự tải nội dung đôi khi rất quan trọng và phải mang tính quyết định, chủ yếu dành cho mức độ ưu tiên của biểu định kiểu và tập lệnh thiết lập. Assets trong SoOn được xử lý như sau:
Khi một gói nội dung được gọi (ví dụ:
t-call-assets="web.assets_common"
), một danh sách nội dung trống sẽ được tạoTất cả các bản ghi thuộc loại
ir.asset
khớp với gói sẽ được tìm nạp và sắp xếp theo số thứ tự. Sau đó, tất cả các bản ghi có trình tự nhỏ hơn 16 sẽ được xử lý và áp dụng vào danh sách tài sản hiện tại.Tất cả các mô-đun khai báo nội dung cho gói nói trên trong bảng kê khai đều áp dụng các hoạt động nội dung cho danh sách này. Việc này được thực hiện theo thứ tự của các phần phụ thuộc của mô-đun (ví dụ: nội dung
web
được xử lý trướctrang web
). Nếu một lệnh cố gắng thêm một tệp đã có trong danh sách thì không có gì được thực hiện đối với tệp đó. Nói cách khác, chỉ lần xuất hiện đầu tiên của tệp mới được giữ trong danh sách.Các bản ghi
ir.asset
còn lại (những bản ghi có trình tự lớn hơn hoặc bằng 16) sau đó cũng được xử lý và áp dụng.
Nội dung được khai báo trong tệp kê khai có thể cần được tải theo một thứ tự cụ thể, ví dụ: jquery.js
phải được tải trước tất cả các tập lệnh jquery khác khi tải thư mục lib. Một giải pháp là tạo một bản ghi ir.asset với trình tự thấp hơn hoặc lệnh 'thêm vào trước', nhưng có một cách khác đơn giản hơn để làm như vậy.
Vì tính duy nhất của từng đường dẫn tệp trong danh sách nội dung được đảm bảo nên bạn có thể đề cập đến bất kỳ tệp cụ thể nào trước một khối bao gồm nó. Do đó, tệp đó sẽ xuất hiện trong danh sách trước tất cả các tệp khác có trong toàn cầu.
'web.assets_common': [
'my_addon/static/lib/jquery/jquery.js',
'my_addon/static/lib/jquery/**/*',
],
Ghi chú
Mô-đun b loại bỏ/thay thế nội dung được khai báo trong mô-đun a sẽ phải phụ thuộc vào mô-đun đó. Cố gắng thao tác trên những tài sản chưa được khai báo sẽ dẫn đến sai sót.
Tải chậm¶
Đôi khi, việc tải các tệp và/hoặc gói nội dung một cách linh hoạt sẽ rất hữu ích, chẳng hạn như chỉ tải thư viện khi cần thiết. Để làm điều đó, khung SoOn cung cấp một số hàm trợ giúp, nằm trong @web/core/assets
.
await loadAssets({
jsLibs: ["/web/static/lib/stacktracejs/stacktrace.js"],
});
- loadAssets(assets)¶
- Đối số
assets (
Object()
) -- mô tả về các nội dung khác nhau cần được tải
- Trả về
Hứa<void>
Load the assets described by the
assets
parameter. It is an object that may contain the following keys:Chìa khóa
Kiểu
Sự miêu tả
jsLibs
chuỗi[]
danh sách các url của tệp javascript
cssLibs
chuỗi[]
danh sách các url của tập tin css
- useAssets(assets)¶
- Đối số
assets (
Object()
) -- mô tả về các nội dung khác nhau cần được tải
Hook này hữu ích khi các thành phần cần tải một số nội dung trong phương thức
onWillStart
của chúng. Nó gọi nội bộloadAssets
.
Mô hình tài sản (ir.asset
)¶
Trong hầu hết các trường hợp, tài sản được khai báo trong bảng kê khai phần lớn sẽ đủ. Tuy nhiên, để linh hoạt hơn, khung này cũng hỗ trợ các nội dung động được khai báo trong cơ sở dữ liệu.
Điều này được thực hiện bằng cách tạo bản ghi ir.asset
. Chúng sẽ được xử lý như thể chúng được tìm thấy trong một bảng kê khai mô-đun và chúng mang lại sức mạnh biểu đạt tương tự như các bản sao kê khai của chúng.
tên
Tên hồ sơ tài sản (cho mục đích nhận dạng).
bó
Gói trong đó nội dung sẽ được áp dụng.
chỉ thị
(mặc định=chắp thêm
)Trường này xác định cách diễn giải
path
(vàtarget
nếu cần). Đây là danh sách các lệnh có sẵn cùng với các đối số bắt buộc của chúng:chắp thêm:
đường dẫn
thêm vào:
path
trước:
target
,path
sau:
target
,path
include:
path
(được hiểu là tên gói)xóa:
path
(được hiểu là nội dung mục tiêu cần xóa)thay thế:
target
,path
con đường
Một chuỗi xác định một trong những điều sau đây:
một đường dẫn tương đối đến tệp nội dung trong hệ thống tệp bổ trợ;
một mẫu toàn cầu cho một tập hợp các tệp nội dung trong hệ thống tệp bổ trợ;
URL tới tệp đính kèm hoặc tệp tài sản bên ngoài;
tên gói khi sử dụng lệnh
include
.
mục tiêu
Tệp mục tiêu để chỉ định một vị trí trong gói. Chỉ có thể được sử dụng với các lệnh
thay thế
,trước
vàsau
.hoạt động
(mặc định=True
)Liệu bản ghi có đang hoạt động hay không
trình tự
(mặc định=16
)Thứ tự tải của bản ghi tài sản (tăng dần). Trình tự thấp hơn 16 có nghĩa là nội dung sẽ được xử lý trước nội dung được khai báo trong tệp kê khai.