2011-11-28 9 views
8

Tengo un problema con el motor de la nueva plantilla anónima. No puede usar plantillas anidadas. Me sale el error: "Este motor de plantillas no admite plantillas anónimas anidadas dentro de sus plantillas".knockoutjs 1.3PRE "Este motor de plantillas no admite plantillas anónimas anidadas en sus plantillas"

Mi pregunta: cómo obligo a knockoutJS a usar el motor de plantillas jquery y no el nuevo. (Hasta que también es compatible con las plantillas anidadas por supuesto)

Gracias

Los atentamente Ene

Respuesta

21

Un par de cosas que deberían ayudar a aclarar esto:

  • Si hace referencia a jquery.tmpl.js antes Knockout.js, entonces KO fijará el jQueryTmplTemplateEngine como predeterminado.
  • jQueryTmplTemplateEngine no admite plantillas anónimas. Esto significa que no puede usar los enlaces de control-flujo como foreach, if, ifnot y with dentro de él. Todavía puede usar el enlace de la plantilla (incluidas las plantillas anidadas).
  • Puede controlar el motor de plantillas predeterminado llamando al ko.setTemplateEngine(). Pasaría una instancia del motor que desea usar como ko.setTemplateEngine(new ko.nativeTemplateEngine)
  • También puede pasar el motor de plantilla al enlace de plantilla en el parámetro templateEngine.

Por lo tanto, para su caso, es probable que desee quitar la referencia a jquery.tmpl.js, por lo que el motor de plantillas nativa está siendo utilizado por defecto. El motor de plantillas nativas admite plantillas anidadas (anónimas o nombradas).

muestra rápida mostrando una plantilla llamada con plantillas anónimos dentro de ella usando el motor de plantillas orígenes: http://jsfiddle.net/rniemeyer/GXFYB/

+0

1 - mucho mejor respuesta que la mía! Sin embargo, es justo decir que existen limitaciones/problemas de compatibilidad con versiones anteriores con el nuevo motor de plantilla knockout. Por ejemplo, su ejemplo de arrastrar y soltar (http://www.knockmeout.net/2011/05/dragging-dropping-and-sorting-with.html) funcionará con el nuevo motor ya que depende de pasar los parámetros en la plantilla enlace de datos? –

+0

Sí, hay algunos cambios que serían necesarios. La función de arrastrar y soltar de la publicación utiliza 'tmplItem' que es un concepto de plantillas jQuery, pero se puede reemplazar fácilmente. También usa 'templateOptions', que no es soporte actual en plantillas nativas. Examinaré la creación de una muestra actualizada utilizando la nueva sintaxis y veré si puedo encontrar formas de limpiarla aún más. –

+0

Es probable que publique esto o agregue una nota a la publicación del blog, pero aquí están los dos ejemplos en 1.3: http://jsfiddle.net/rniemeyer/JEe2x/ y http://jsfiddle.net/rniemeyer/HzNuS/ . Los limpié un poco y envolví el enlace de la plantilla para hacerlo lo más simple posible para agregar el enlace. –

0

Tengo este problema cuando quité el include a la tmpl JS biblioteca, pero volver a agregar lo arreglen el problema . ¿Estás seguro de haber incluido la biblioteca jquery.tmpl.js?

<script src='..<some path>../jquery.tmpl.js")' type="text/javascript"></script> 

Además, incluyo primero la biblioteca tmpl y la biblioteca knockout. Tal vez este es un factor?

Cuestiones relacionadas