javascript - Aurelia 绑定(bind)行为如何增强 innerHTML 内容?

标签 javascript html innerhtml aurelia

在我的网络应用程序中,我使用 Markdown 值转换器从 Markdown 字符串呈现 HTML,例如

<div innerhtml.bind="string | markdown"></div>

这很好用,在 div 中我得到了 string 中 Markdown 内容的 HTML 呈现。

值转换器能够在输出中呈现 Aurelia 自定义元素,但作为值转换器输出中作为字符串的元素,Aurelia 的模板引擎无法增强它。

每当源值发生变化时,绑定(bind)行为是否能够使用 TemplatingEngine 来增强在 DOM 中呈现后值转换器的输出?像这样的东西:

<div innerhtml.bind="string | markdown & enhance"></div>

我试过这个,但它不起作用(它在 target 获取它的 child 之前被评估):

export class EnhanceBindingBehavior {

    private templatingEngine: TemplatingEngine;

    public constructor(templatingEngine: TemplatingEngine) {
        this.templatingEngine = templatingEngine;
    }

    public bind(binding: Binding, scope: Scope): void {
        let target: HTMLElement = binding["target"];
        for (let i = 0; i < target.children.length; i++) {
            console.log("enhancing element " + i);
            this.enhance(target.children[i]);
        }

    }

    public unbind(binding: Binding, scope: Scope): void {

    }

    private enhance(element: Element): void {
        this.templatingEngine.enhance({
            element: element
        });
    }
}

有可能吗?

最佳答案

受 Jeremy answer 的启发,我制作了这个自定义属性:

export class EnhancedCustomAttribute {

    private templatingEngine: TemplatingEngine;

    private element: HTMLElement;

    private value: string;

    public constructor(templatingEngine: TemplatingEngine, element: Element) {
        this.templatingEngine = templatingEngine;
        this.element = <HTMLElement> element;
    }

    public valueChanged(html: string) {
        this.enhance(html);
    }

    private enhance(html: string) {
        this.element.innerHTML = html;
        for (let i = 0; i < this.element.children.length; i++) {
            this.templatingEngine.enhance(this.element.children.item(i));
        }
    }

}

关于javascript - Aurelia 绑定(bind)行为如何增强 innerHTML 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37325758/

相关文章:

javascript - 如何在没有 Javascript 生成内容的情况下获取原始 innerHTML 源代码?

javascript - 按下菜单链接不起作用

javascript - TypeScript 编译器无法在 for of 循环中找到 immutable.js Map 迭代器

仅在小窗口上触发 Jquery

javascript - 使用 jquery 将 div 移动到其他 div 上

javascript - 如何使用innertHTML,在这种情况下

javascript - 搜索字符串中的值,然后更新字符串

javascript - 如何提高 Canvas 中线条的分辨率

javascript - Jquery 输入类型文件作为触发器不起作用

javascript - 为什么innerHTML在for循环中不能正常工作?