observablearray knockoutjs knockout data jquery knockout.js knockout-2.0

jquery - data - knockoutjs variables



Jquery knockout: renderizar la plantilla en la memoria (2)

Sí, es posible aplicar enlaces a nodos desanexados al DOM. Simplemente use la función muy útil ko.applyBindingsToNode para lograr el resultado deseado.

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; };

Eche un vistazo a este pequeño ejemplo: http://jsfiddle.net/6s4gq/

Actualizar:

Originalmente era el método ko.renderTemplate pero hay un método incorporado en Knockout con el mismo nombre. ko.renderTemplate podría dejar de funcionar su aplicación, especialmente si está utilizando el enlace de template . ¡Ten cuidado!

Tengo una plantilla knockout:

<script id="draggableHelper" type="text/x-jquery-tmpl"> <div class="draggableHelper"> <span data-bind="text: Name"></span> </div> </script>

¿Es posible generar el resultado de la plantilla y guardarla en la memoria enviando el objeto para rellenar la plantilla?

Algo como:

var result = ko.renderTemplate($("#draggableHelper").html(), { Name: "Test" });


La respuesta de f_martinez está muy cerca de lo que necesitaba, solo tenía que especificar el motor de plantillas para que funcione. Mi función:

var renderTemplate = function (name, data) { // create temporary container for rendered html var temp = $("<div>"); // apply "template" binding to div with specified data var options = { template: { name: name, data: data, templateEngine: new ko.nativeTemplateEngine() } }; ko.applyBindingsToNode(temp[0], options); // save inner html of temporary div var html = temp.html(); // cleanup temporary node and return the result temp.remove(); return html; };