我有一个Aurelia应用程序,用户可以在其中单击一个按钮并创建一个新标签。用户单击按钮之前,该选项卡及其内容(自定义元素)在页面上不存在。我在运行时(通过Javascript)在视图模型中为内容生成HTML。
我不断看到使用模板引擎compose
或enhance
函数的提法,但都不适合我。我不知道如何使用<compose>
元素(在HTML中),因为我是基于用户单击按钮创建元素的。
我的想法是,按钮具有click.delegate
一个功能,该功能最终会完成类似
const customElement = document.createElement('custom-element');
parentElement.appendChild(customElement);
const view = this.templatingEngine.enhance({
element : customElement,
container : this.container, // injected
resources : this.viewResources, // injected
bindingContext: {
attrOne: this.foo,
attrTwo: this.bar,
}
});
view.attached();
但是,所有这些操作只是创建一个HTML元素,<custom-element></custom-element>
而没有实际绑定任何属性。
如何创建类似于<custom-element attr-one.bind="foo" attr-two.bind="bar"></custom-element>
Javascript 的自定义元素?
正如您在自己的答案中指出的那样,是造成此问题的资源不足。一种解决方案是在全球范围内注册。但是,这并不总是所需的行为,因为有时您希望延迟加载资源并增强一些懒惰的HTML。增强API接受用于编译视图的资源的选项。因此,您可以执行以下操作:
.enhance({
resources: new ViewResources(myGlobalResources) // alter the view resources here
})
对于视图资源,如果要从特定的自定义元素中获取它,则可以进入创建的生命周期并获取它,也可以注入容器并通过以下方法检索它 container.get(ViewResources)