jquery.tmpl
的文档在渲染过程中使用.appendTo
将模板插入DOM:
$.tmpl( myTemplate, myData ).appendTo( "#target" );
我正在尝试将一个已有的应用程序从另一个模板引擎转换过来,我的代码需要先将模板渲染成字符串,然后再将其添加到DOM中。这是否可行?应该怎么做?
jquery.tmpl
的文档在渲染过程中使用.appendTo
将模板插入DOM:
$.tmpl( myTemplate, myData ).appendTo( "#target" );
我正在尝试将一个已有的应用程序从另一个模板引擎转换过来,我的代码需要先将模板渲染成字符串,然后再将其添加到DOM中。这是否可行?应该怎么做?
这里的回答对我没有帮助,但是Adam的回复让我找到了正确的方向:任何经过jQuery封装的元素都有一个.html()
方法。
var output = $( "#infoWindowTemplate" ).tmpl( city_data ).html()
如果需要文本内容...
var output = $( "#infoWindowTemplate" ).tmpl( city_data ).text()
但请注意,模板的最外层(根)元素会被跳过,所以您应该让模板看起来像这样:
<script id='infoWindowTemplate' type='text/x-jquery-tmpl'></script>
或者直接使用jQuery outerHtml插件(http://darlesson.com/jquery/outerhtml/),将.html()
替换为.outerHTML()
。
var str = $("<div />").append($.tmpl(myTemplate, myData)).html();
jQuery.tmpl
返回一个包装在 jQuery 对象中的 HTMLElement,可以像旧模板系统中呈现的字符串一样使用。
var $template = $('#template'),
html = $.tmpl($template, data).get();
jQuery模板提供了$.template()
(请参考源代码中的描述) - 它在使用您的数据缓存模板进行评估后返回字符串数组。我将从头开始编写(并从Chrome的控制台实验中学习),但您会得到整个想法。
Create and cache a named template function
$("template-selector").template("template-name");
Get your template function and invoke it with your data
var tmpl = $.template("template-name"); // template function
var strings = tmpl($, {data: {<your data here>}}); // array of strings
var output = strings.join(''); // single string
这个运行正确
var s = $.tmpl(url, dataContext).get()[0].data;
我错了,上面的例子只适用于返回非HTML内容的情况。如果是HTML,则使用以下代码:
var s = $.tmpl(url, dataContext).get()[0].outerHTML
编辑:经过一番搜索,我发现了Chrome和FF之间的差异(上面的例子在Chrome中有效)。
最终我找到了跨浏览器工作的方法,假设我们想要构建一个标签。因此,我们的模板将如下所示:
<a href='${url}'>${text}</a>
将模板包装在任何标签内,然后使用 .html() 函数是获取结果字符串的最简单方法。
var t = '<div><a href='${url}'>${text}</a></div>'
var d = {url: 'stackoverflow.com', text: 'best site'};
var html = $.tmpl(s, d).get()[0];
html = $(html).html(); // trick is here
你可以像这样准备模板数据
var tmplData = {link:"your link",name:"yourname",count:5};
$("#idofelementwhereuwanttoappend").append($("#infoWindowTemplate").tmpl(tmpldata));
这个idofelementwhereuwanttoappend
是你的模板数据将被渲染的ID。