Get dynamically inserted HTML to work with knockoutjs
Asked Answered
G

1

43

I'm using JQuery DataTables for all my tables because of all the nice built-in features, but it seems the only way to customize the table layout is to set the "sDom" option attribute for the DataTable and use something like $("div.SOMECLASS").html(HTML_HERE) to insert the customized html into the table. (FYI, i'm just trying to customize the header).

The problem is I want the inserted html to use knockoutjs binding. Knockout doesn't seem to initialize the binding this way.

Is there a way to work around this?

This is part of the html that I want to insert. It's pretty much a drop down list of some custom filter functions for the table.

'<li><a data-bind="click: Filter(\'Severity 1\', 2)">Severity 1</a></li>'
Glycolysis answered 31/5, 2012 at 1:47 Comment(2)
with Jquery you can use .live or .on to handle dynamic created contentVenter
Possible duplicate of knockout data-bind on dynamically generated elementsVitriform
V
68

You have to call this function after insert dynamic HTML element

ko.applyBindings(viewModel, elementContainingDynamicContent)

Example here http://jsfiddle.net/rniemeyer/FCN5p/

Venter answered 31/5, 2012 at 1:54 Comment(3)
This is the correct answer, I'm not sure why it was so difficult to find. It can't be that uncommon to need to load page content dynamically. Thanks!Clute
Note to all, for this to work, use document.getElementById("elementId") to get a DOM element; don't use jquery $('#elementId'), otherwise, ko raises an error: tinyurl.com/laaqf7jCacia
If you already have the jQuery element, $element[0] also works.Vinaya

© 2022 - 2024 — McMap. All rights reserved.