Yes it's possible to apply bindings to nodes unattached to the DOM. Just use very useful function ko.applyBindingsToNode
to achieve the desired result.
ko.renderTemplateX = function(name, data){
// create temporary container for rendered html
var temp = $("<div>");
// apply "template" binding to div with specified data
ko.applyBindingsToNode(temp[0], { template: { name: name, data: data } });
// save inner html of temporary div
var html = temp.html();
// cleanup temporary node and return the result
temp.remove();
return html;
};
Take a look at this small example: http://jsfiddle.net/6s4gq/
Update:
Originally it was ko.renderTemplate method but there is built-in method in Knockout
with the same name. Overriding ko.renderTemplate
could stop working your application, especially if you're using template
binding. Be careful!
subscribe()
to an observable and grab theinnerHTML
from the appropriate node. – Moyra