Đăng ký

Các sổ đăng ký là bản đồ khóa/giá trị (được sắp xếp). Chúng là các điểm mở rộng ứng dụng khách web chính: nhiều tính năng được cung cấp bởi khung javascript của SoOn chỉ cần tra cứu sổ đăng ký bất cứ khi nào nó cần định nghĩa cho một số đối tượng (chẳng hạn như trường, chế độ xem, hành động hoặc dịch vụ của khách hàng). Việc tùy chỉnh máy khách web sau đó được thực hiện đơn giản bằng cách thêm các giá trị cụ thể vào sổ đăng ký chính xác.

import { Registry } from "@web/core/registry";

const myRegistry = new Registry();

myRegistry.add("hello", "odoo");

console.log(myRegistry.get("hello"));

Một tính năng hữu ích của các cơ quan đăng ký là chúng duy trì một tập hợp các cơ quan đăng ký phụ, thu được bằng phương pháp category. Nếu sổ đăng ký phụ chưa tồn tại, nó sẽ được tạo nhanh chóng. Tất cả các sổ đăng ký được máy khách web sử dụng đều được lấy theo cách như vậy từ một sổ đăng ký gốc, được xuất dưới dạng @web/core/registry.

import { registry } from "@web/core/registry";

const fieldRegistry = registry.category("fields");
const serviceRegistry = registry.category("services");
const viewRegistry = registry.category("views");

API đăng ký

class Registry()

Tạo một sổ đăng ký mới. Lưu ý rằng sổ đăng ký là một bus sự kiện, vì vậy người ta có thể nghe sự kiện UPDATE nếu cần. Các sổ đăng ký được sắp xếp theo thứ tự: phương thức getAll trả về danh sách các giá trị được sắp xếp theo số thứ tự của chúng.

Registry.add(key, value[, options])
Đối số
  • key (string()) -- chìa khóa cho mục mới

  • value (any()) -- giá trị cho mục mới

  • options (Object()) -- tùy chọn

  • [options.force] (boolean()) -- đừng ném nếu chìa khóa đã tồn tại

  • [options.sequence] (number()) -- số thứ tự (hữu ích cho các mục đặt hàng)

Trả về

Đăng ký

Chèn một giá trị vào một khóa cụ thể. Nếu khóa đã được sử dụng, phương thức này sẽ báo lỗi (trừ khi tùy chọn force được đặt thành true). Tùy chọn trình tự rất hữu ích để chèn giá trị vào một vị trí cụ thể. Phương thức này cũng kích hoạt sự kiện UPDATE.

Trả về cùng một sổ đăng ký, vì vậy lệnh gọi phương thức add có thể được nối tiếp.

Registry.get(key[, defaultValue])
Đối số
  • key (string()) -- chìa khóa cho mục nhập

  • any (defaultValue()) -- giá trị trả về nếu không có mục nào cho khóa tồn tại

Trả về giá trị tương ứng với đối số key. Nếu sổ đăng ký không chứa khóa đó, phương thức này sẽ trả về defaultValue nếu được cung cấp hoặc nếu không sẽ đưa ra lỗi.

Registry.contains(key)
Đối số
  • key (string()) -- chìa khóa cho mục nhập

Trả về

boolean

Trả về true nếu key có trong sổ đăng ký

Registry.getAll()
Trả về

bất kì[]

Trả về danh sách tất cả các thành phần trong sổ đăng ký. Nó được sắp xếp theo số thứ tự.

Registry.remove(key)
Đối số
  • key (string()) -- chìa khóa cho mục cần được loại bỏ

Xóa cặp khóa/giá trị khỏi sổ đăng ký. Thao tác này kích hoạt sự kiện UPDATE.

Registry.category(subcategory)
Đối số
  • subcategory (string()) -- tên cho danh mục phụ

Trả về

Đăng ký

Trả về sổ đăng ký phụ được liên kết với danh mục con. Nếu nó chưa tồn tại, sổ đăng ký phụ sẽ được tạo nhanh chóng.

Danh sách tham khảo

Loại

Nội dung

effect

thực hiện cho tất cả các hiệu ứng có sẵn

formatters

các hàm tiện ích để định dạng giá trị (chủ yếu được sử dụng cho các giá trị trường)

main_comComponents

thành phần cấp cao nhất

trình phân tích cú pháp

các hàm tiện ích để phân tích các giá trị (chủ yếu được sử dụng cho các giá trị trường)

services

tất cả các dịch vụ cần được kích hoạt

systray

các thành phần được hiển thị trong vùng systray trên thanh điều hướng

user_menuitems

các mục menu được hiển thị trong menu người dùng (trên cùng bên phải của thanh điều hướng)

Đăng ký hiệu lực

Sổ đăng ký hiệu ứng chứa việc triển khai tất cả các hiệu ứng có sẵn. Xem phần trên effect service để biết thêm chi tiết.

Sổ đăng ký định dạng

Sổ đăng ký formatters chứa các chức năng định dạng các giá trị. Mỗi trình định dạng có API sau:

format(value[, options])
Đối số
  • value (T | false()) -- một giá trị của một loại cụ thể hoặc false nếu không có giá trị nào được đưa ra

  • options (Object()) -- Các tùy chọn khác nhau

Trả về

sợi dây

Định dạng một giá trị và trả về một chuỗi

Đăng ký thành phần chính

Sổ đăng ký thành phần chính (main_comComponents) rất hữu ích để thêm các thành phần cấp cao nhất vào máy khách web. Máy khách web có MainComponentsContainer là con trực tiếp. Thành phần này về cơ bản là sự thể hiện trực tiếp danh sách các thành phần được sắp xếp theo thứ tự được đăng ký trong sổ đăng ký thành phần chính.

API
interface {
    Component: Owl Component class
    props?: any
}

Ví dụ: thành phần LoadingIndicator có thể được thêm vào sổ đăng ký như thế này:

registry.category("main_components").add("LoadingIndicator", {
  Component: LoadingIndicator,
});

Đăng ký phân tích cú pháp

Sổ đăng ký trình phân tích pháp chứa các hàm phân tích các giá trị. Mỗi trình phân tích cú pháp có API sau:

parse(value[, options])
Đối số
  • value (string()) -- một chuỗi đại diện cho một giá trị

  • options (Object()) -- các tùy chọn khác nhau (cụ thể của trình phân tích cú pháp)

Trả về

T một giá trị hợp lệ

Phân tích một chuỗi và trả về một giá trị. Nếu chuỗi không biểu thị giá trị hợp lệ, trình phân tích cú pháp có thể bị lỗi và đưa ra lỗi.

Đăng ký dịch vụ

Sổ đăng ký dịch vụ (danh mục: services) chứa tất cả services cần được kích hoạt bởi khung SoOn.

import { registry } from "@web/core/registry";

const myService = {
    dependencies: [...],
    start(env, deps) {
        // some code here
    }
};

registry.category("services").add("myService", myService);

Sổ đăng ký hệ thống

Systray là vùng bên phải thanh điều hướng chứa nhiều thành phần nhỏ khác nhau, thường hiển thị một số loại thông tin (như số lượng tin nhắn chưa đọc), thông báo và/hoặc cho phép người dùng tương tác với chúng.

Sổ đăng ký systray chứa mô tả về các mục systray này, dưới dạng các đối tượng có ba khóa sau:

  • Thành phần: lớp thành phần đại diện cho mục. Phần tử gốc của nó phải là thẻ <li>, nếu không nó có thể không được tạo kiểu đúng cách.

  • props (tùy chọn): props cần được cung cấp cho thành phần

  • isDisplayed (tùy chọn): một hàm nhận env và trả về một boolean. Nếu đúng, mục systray sẽ được hiển thị. Nếu không nó sẽ bị loại bỏ.

Ví dụ:

import { registry } from "@web/core/registry";

class MySystrayItem extends Component {
    // some component ...
}

registry.category("systray").add("myAddon.myItem", {
    Component: MySystrayItem,
});

Sổ đăng ký systray là sổ đăng ký theo thứ tự (có số trình tự):

const item = {
    Component: MySystrayItem
};
registry.category("systray").add("myaddon.some_description", item, { sequence: 43 });

Số thứ tự mặc định là 50. Nếu được cung cấp, số này sẽ được sử dụng để sắp xếp các mặt hàng. Trình tự thấp nhất nằm ở bên phải và trình tự cao nhất nằm ở bên trái trong menu hệ thống.

Đăng ký menu người dùng

Sổ đăng ký menu người dùng (danh mục: user_menuitems) chứa tất cả các mục menu được hiển thị khi mở menu người dùng (phần tử thanh điều hướng có tên người dùng, ở trên cùng bên phải).

Các mục menu người dùng được xác định bằng một hàm lấy env và trả về một đối tượng đơn giản, chứa thông tin sau:

  • description : văn bản của mục menu,

  • href : (tùy chọn) nếu được cung cấp (và trung thực), văn bản mục sẽ được đặt trong thẻ a với thuộc tính đã cho href,

  • callback : gọi lại để gọi khi mục được chọn,

  • hide: (tùy chọn) cho biết liệu mục này có bị ẩn hay không (mặc định: false),

  • trình tự: (tùy chọn) xác định thứ hạng của mục trong số các mục thả xuống khác (mặc định: 100).

Menu người dùng gọi tất cả các chức năng xác định các mục mỗi khi nó được mở.

Ví dụ:

import { registry } from "@web/core/registry";

registry.category("user_menuitems").add("my item", (env) => {
    return {
        description: env._t("Technical Settings"),
        callback: () => { env.services.action_manager.doAction(3); },
        hide: (Math.random() < 0.5),
    };
});