温馨提示:本文翻译自stackoverflow.com,查看原文请点击:Aurelia - dynamically create custom element in a view-model
aurelia aurelia-templating

Aurelia - 在视图模型中动态创建自定义元素

发布于 2020-04-16 10:07:24

我有一个Aurelia应用程序,用户可以在其中单击一个按钮并创建一个新标签。用户单击按钮之前,该选项卡及其内容(自定义元素)在页面上不存在。我在运行时(通过Javascript)在视图模型中为内容生成HTML。

我不断看到使用模板引擎composeenhance函数的提法,但都不适合我。我不知道如何使用<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 的自定义元素

查看更多

提问者
lebolo
被浏览
14
bigopon 2020-02-05 20:44

正如您在自己的答案中指出的那样,是造成此问题的资源不足。一种解决方案是在全球范围内注册。但是,这并不总是所需的行为,因为有时您希望延迟加载资源并增强一些懒惰的HTML。增强API接受用于编译视图的资源的选项。因此,您可以执行以下操作:

.enhance({
  resources: new ViewResources(myGlobalResources) // alter the view resources here
})

对于视图资源,如果要从特定的自定义元素中获取它,则可以进入创建的生命周期并获取它,也可以注入容器并通过以下方法检索它 container.get(ViewResources)