我正在使用 Vaadin Flow,版本 22。我正在尝试集成一个 Web 组件,该组件具有需要一组对象的属性,并且这些对象使用 Javascript 日期。
为了给您一个想法,以下是您应该如何在 Javascript 环境中使用它:
import {LitElement, html} from 'lit';
import {customElement} from 'lit/decorators.js';
import '@third-party/third-party-element';
@customElement('new-element')
export class NewElement extends LitElement {
render() {
const data = [
{value: "someValue1", date: new Date(2022,1,1)},
{value: "someValue2", date: new Date(2022,1,2)}
];
return html`
<third-party-element data='${data}'></third-party-element>
`;
}
}
我还没有弄清楚如何将这种数据从 Java 代码传递到 LitElement。到目前为止,我坚持使用下面的代码(实际上,通过 Jackson 将我的数据编组为 JSON),但如果我尝试在其中使用日期,它将只是一个 ISO8601 字符串,而不是实际的 Javascript 日期。 .
package org.mycompany;
import com.vaadin.flow.component.Tag;
import com.vaadin.flow.component.dependency.JsModule;
import com.vaadin.flow.component.dependency.NpmPackage;
import com.vaadin.flow.component.littemplate.LitTemplate;
@Tag("third-party-element")
@NpmPackage(value = "@third-party/third-party-element", version = "1.0.0")
@JsModule("@third-party/third-party-element/third-party-element.js")
public class ThirdPartyElement extends LitTemplate {
public ThirdPartyElement() {
getElement().setAttribute("data", "[{\"value\": \"someValue1\", \"date\": \"???\"}, {\"value\": \"someValue2\", \"date\": \"???\"}]");
}
}
你能帮我弄清楚怎么做吗?
提前致谢 !
编辑:在探索 Vaadin 代码后,我意识到没有内置的方法可以自动将我的数据解析为日期。所以我最终制作了一个扩展第三方类的 JS 类,并为其添加了一个方法setData
,该方法将解析传入的 JSON 数据并将每个 ISO8601 字符串转换为日期,然后执行this.data = myNewData;
. 并从我调用的Java中的相应组件
getElement().callJsFunction("setData", this.objectMapper.writeValueAsString(myData));