J'essaie d'utiliser "élément virtuel" avec liaison html pour créer une partie html à la volée mais a échoué avec un message: "La liaison" html "ne peut pas être utilisée avec des éléments virtuels". Voici le jsfiddle: http://jsfiddle.net/d3Dpp/ .
Quelqu'un sait s'il y a une solution de contournement?
Eh bien, après avoir joué avec KO, je vois que c'est possible.
L'exemple de travail est ici
Malheureusement, cela nécessite la duplication de certaines fonctionnalités de neutralisation interne
KnockoutJS 2.2.1 a ajouté des éléments virtuels liés à l'exportation, donc il est disponible même dans la version minifiée:
ko.exportSymbol('virtualElements.allowedBindings', ko.virtualElements.allowedBindings);
Cela signifie qu'une meilleure solution pour la liaison html est possible – voir la réponse de Martijn .
Basé sur le code d'Artem et KnockoutJS 2.2.1, voici une version améliorée:
Améliorations:
Voici le code
{ var overridden = ko.bindingHandlers['html'].update; ko.bindingHandlers['html'].update = function (element, valueAccessor) { if (element.nodeType === 8) { var html = ko.utils.unwrapObservable(valueAccessor()); ko.virtualElements.emptyNode(element); if ((html !== null) && (html !== undefined)) { if (typeof html !== 'string') { html = html.toString(); } var parsedNodes = ko.utils.parseHtmlFragment(html); if (parsedNodes) { var endCommentNode = element.nextSibling; for (var i = 0, j = parsedNodes.length; i < j; i++) endCommentNode.parentNode.insertBefore(parsedNodes[i], endCommentNode); } } } else { // plain node overridden(element, valueAccessor); } }; } ko.virtualElements.allowedBindings['html'] = true;
Vous pouvez également utiliser ceci comme point de vue:
<div data-bind="html: html"></div>
Cela remplacera le innerHtml du div "conteneur" par votre propriété html fournie.