【发布时间】:2019-01-09 12:14:56
【问题描述】:
对于下面的 JavaScript 代码,我该如何用 ReasonML 编写?
class HelloWorld extends HTMLElement {
constructor() {
super();
// Attach a shadow root to the element.
let shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.innerHTML = `<p>hello world</p>`;
}
}
我找不到任何关于在 ReasonML 中编写类的文档?我不能使用普通对象/类型,因为我需要从不适用于ES style classes 的 HTMLElement 类扩展。
我已经研究过这个existing question - How to extend JS class in ReasonML 但是,这是另一回事。要编写 Web 组件,我们需要扩展 HTMLElement 并且必须使用 new 关键字调用它。 ES5 样式扩展机制不起作用。
【问题讨论】:
-
@Yawar,我不认为它是重复的。它专门针对 Web 组件扩展原生
HTMLElement类。 -
嗨,Harshal,如果您要扩展 JavaScript 类,据我所知,我的链接答案是唯一的方法。我还在我的链接答案中提到你必须做两件事:在
[%%bs.raw ...]的类中扩展;然后从 Reason 端绑定到它。绑定到它,例如构造函数,将允许您让 Reason 输出必要的new HelloWorld()调用。 -
顺便说一句,我刚刚更新了该答案以明确显示绑定,希望对您有所帮助。
-
谢谢@Yawar。我读了你的更新答案。它有效,但失去了理性。做这个练习的重点是编写 stencil.js 之类的 web 组件编译器,具有 reasonml 的美感。
标签: class ffi reason bucklescript