🦉 工具函数(Utils)🦉
Owl 提供了一些实用的工具函数,用于解决常见问题。它们都可以通过 owl.utils
命名空间访问。
whenReady
whenReady
函数返回一个 Promise
,当 DOM 准备就绪时解析(如果已经准备好,则立即解析)。 如果传入回调函数作为参数,会在 DOM 就绪时(或立刻)执行它。
js
const { whenReady } = owl;
await whenReady();
// 在此处执行一些操作
或使用回调方式:
js
whenReady(function () {
// 执行某些操作
});
loadFile
loadFile
是一个用于获取文件的辅助函数。它执行一个简单的 GET
请求,并返回一个 Promise,解析结果为字符串。 此函数最初用于加载模板文件。例如:
js
const { loadFile } = owl;
async function makeEnv() {
const templates = await loadFile("templates.xml");
// 执行相关操作
}
EventBus
这是一个简单的事件总线,API 与标准 DOM 元素类似,另外添加了一个 trigger
方法用于派发事件:
js
const bus = new EventBus();
bus.addEventListener("event", () => console.log("发生了某些事情"));
bus.trigger("event"); // 控制台输出:'发生了某些事情'
validate
validate
函数用于验证某个对象是否符合指定的 schema。Owl 内部用于 props 验证。例如:
js
validate(
{ a: "hey" },
{
id: Number,
url: [Boolean, { type: Array, element: Number }],
}
);
// 抛出包含以下信息的错误:
// - 未知键 'a'
// - 缺少 'id'(应为数字)
// - 缺少 'url'(应为布尔值或数字数组)
batched
batched
函数会创建一个“批处理”版本的回调函数:在同一个微任务中多次调用只会触发一次真正的执行。
js
function hello() {
console.log("hello");
}
const batchedHello = batched(hello);
batchedHello();
// 暂时不会输出
batchedHello();
// 仍然不会输出
await Promise.resolve(); // 等待下一个微任务
// 控制台只输出一次 "hello"