以编程方式将Knockout绑定应用于文本块中的特定标记

我有一个html标记块,我想使用Knockout JS将数据绑定到div。 这对于敲除html绑定来说非常简单。

我想要做的是根据他们的类有条件地绑定该html标记中的子元素。 这些元素可以出现在html标记中的任何位置,因为它们是内联元素(如spana标签等)。

这样做的目的是将事件数据绑定到此文本块中的特定单词或短语,以便我可以调用一个函数(在这种情况下,是一个带有目标单词或短语定义的模态)。

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

  1. 使用jQuery按类抓取元素,然后以某种方式数据绑定到事后。 我不知道这是否会因各种原因而起作用 – 没有准备好DOM,无法在该方法中进行数据绑定等。

  2. 使用knockout的模板绑定 ,并添加一个afterRender模板回调,该回调解析元素的文本块并相应地对它们进行数据绑定。

  3. 以上两者的组合。 (是的,我知道,这是三个途径。)

以前有人做过这样的事吗? 如果可能的话,我想得到你的建议和反馈。 谢谢!

除非您确定要绑定的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不能用于不安全的目的。

希望这可以帮助。