如何使用ViewCompiler手动编译DOM的一部分
How do you use ViewCompiler to manually compile part of the DOM?
假设我有一个简单的视图模型(widget.js):
import {Behavior} from 'aurelia-framework';
export class Widget
{
static metadata() { return Behavior.customElement('widget') }
constructor()
{
this.title= "AwesomeWidget";
}
}
具有以下视图:(widget.html):
<template>
<div>${title}</div>
</template>
现在假设我将这样的标记注入到DOM中:
var markup = `<div><widget></widget></div>`;
var $markup = $(markup);
var $placeholder = $("#placeholder");
$placeholder.append($markup);
我现在如何告诉Aurelia针对Widget的新实例编译DOM的这个新添加部分?我知道它涉及ViewCompiler,但需要一个例子来帮助我。如果有任何帮助,我将不胜感激。谢谢
几个月前,TemplateEngine类获得了一个新的可访问的增强API方法。这简化了手动使用viewCompiler和compile方法的需要,而这是最初唯一简单的方法。这篇博客文章详细介绍了如何使用增强的API来Aureliaify在您的页面中动态添加HTML。
这还有一个额外的好处,即不需要清理已编译的HTML或分离任何内容。
下面是一个例子:https://gist.run/?id=762c00133d5d5be624f9
它使用Aurelia的视图编译器来编译html并创建一个绑定到所提供的视图模型的视图实例。
查看factory.js
import {
inject,
ViewCompiler,
ViewResources,
Container,
ViewSlot,
createOverrideContext
} from 'aurelia-framework';
@inject(ViewCompiler, ViewResources)
export class ViewFactory {
constructor(viewCompiler, resources, container) {
this.viewCompiler = viewCompiler;
this.resources = resources;
this.container = container;
}
insert(containerElement, html, viewModel) {
let viewFactory = this.viewCompiler.compile(html);
let view = viewFactory.create(this.container);
let anchorIsContainer = true;
let viewSlot = new ViewSlot(containerElement, anchorIsContainer);
viewSlot.add(view);
view.bind(viewModel, createOverrideContext(viewModel));
return () => {
viewSlot.remove(view);
view.unbind();
};
}
}
用法:
let view = this.viewFactory.insert(containerElement, viewHtml, viewModel);
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何使用ViewCompiler手动编译DOM的一部分
- 通过Java加载XML并制作HTML DOM的一部分
- 在表单提交将DOM的一部分替换为分部之后,我应该将ajax成功绑定到什么来使我的javascript工作
- JavaScript:将字符串的一部分放入DOM容器中,保存溢出
- 警报和确认函数是内置在 JavaScript 中,还是 DOM 的一部分
- 是新创建的元素,它不是DOM样式的一部分,或者所有值都设置为默认值
- cookie被认为是DOM树的一部分吗?
- 用jquery添加的内容不是DOM的一部分
- 如何使用变量值作为dom树的一部分
- 作为IIFE的一部分创建的DOM元素会发生什么?
- 元素不可见,但仍然是DOM的一部分用于操作
- 为什么React要更新DOM的这一部分?