编程应用文本块中剔除绑定到特定的标签(Programmatically apply Knockout

2019-09-17 19:46发布

我有,我想数据绑定使用一个div HTML标记的块淘汰赛JS 。 这是淘汰赛很简单html结合。

我今天准备这样做的条件是,HTML标记内绑定子元素的基础上,他们的阶级。 这些元素可以在HTML标记内的任何地方出现,因为它们是内联元素(如spana标签等)。

这样做的目的是为了这个数据绑定文本块中点击事件,以特定的词或短语,这样我可以调用一个函数(在这种情况下,与目标词或短语的定义的模式)。

有谁知道如何做到这一点? 从我所看到的,我有两个主要途径来探讨:

  1. 使用jQuery抢按类元素,并以某种方式对数据绑定,然后在事后。 我不知道这是否会因为各种原因工作 - 不具有DOM准备好了,不能够在法等进行数据绑定

  2. 利用基因敲除的模板绑定 ,并添加afterRender模板回调解析为元素的文本块,并相应databinds他们。

  3. 上述两种的组合。 (是的,我知道,这三大途径。)

有没有人做过这样的事之前? 我希望得到您的建议和反馈,如果可能的话。 谢谢!

Answer 1:

除非你确信你是绑定到HTML是安全的,我不推荐这种方法。 在HTML结合这个样子的。

ko.bindingHandlers['html'] = {
    'init': function() {
        // Prevent binding on the dynamically-injected HTML 
        // (as developers are unlikely to expect that, and it 
        // has security implications)
        return { 'controlsDescendantBindings': true };
    },
    'update': function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        ko.utils.setHtml(element, value);
    }
};

看着这个你可以写一个HTML2结合

ko.bindingHandlers['html2'] = {
    'init': function() {
        return { 'controlsDescendantBindings': false };
    },
    'update': function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        ko.utils.setHtml(element, value);
    }
};

http://jsfiddle.net/madcapnmckay/LDtuF/1/

要小心,要确保HTML无法使用不安全的目的。

希望这可以帮助。



文章来源: Programmatically apply Knockout bindings to specific tags within a text block