可以将JQuery模板存储在.js文件或类似文件中吗?
我有一个Web服务,它返回一个项目,可以是几种类型之一。我想使用jquery对它进行模板化,并根据它是什么类型的对象,使用适当的模板 我想知道存储各种模板的最佳方式是什么。我想把它们放在一个名为ItemTemplates.js的文件中或者其他任何文件都可以,每个文件都有一个名称,比如Cat_Template Dog_Template,我可以使用开关{}根据对象返回的类型加载正确的文件可以将JQuery模板存储在.js文件或类似文件中吗?,jquery,asp.net,Jquery,Asp.net,我有一个Web服务,它返回一个项目,可以是几种类型之一。我想使用jquery对它进行模板化,并根据它是什么类型的对象,使用适当的模板 我想知道存储各种模板的最佳方式是什么。我想把它们放在一个名为ItemTemplates.js的文件中或者其他任何文件都可以,每个文件都有一个名称,比如Cat_Template Dog_Template,我可以使用开关{}根据对象返回的类型加载正确的文件 jquery模板可以存储在js文件中吗?还有别的好办法吗?我使用的是asp.net,因此可能存在一个解决方案?如
jquery模板可以存储在js文件中吗?还有别的好办法吗?我使用的是asp.net,因此可能存在一个解决方案?如果您指的是在javascript文件中存储类似的内容:
<script id="myTemplate" type="text/x-jquery-tmpl">
<li>
<a href="${Url}" target="_blank">${Text}</a>
</li>
</script>
这是不可能的,因为HTML和.js文件不能解析为HTML。我能想到的唯一替代方法是在$(document).ready()期间从.js文件动态生成这样的HTML
document.write('<script id="myTemplate" type="text/x-jquery-tmpl">template HTML</script>');
document.write('template HTML');
或
$(“”)
.html('template html')
.附于(“主体”);
以前没有测试过,所以我不知道它是否有效。优秀的jQote(,)是一个灵活的jQuery模板库。从文档中:
<script type="text/html" id="template">
<![CDATA[
<p class="greetings">
Hello <%= this.name %>, how are you doing?
May I offer you
<% this.is_starving() ? %>
some tasty peasant?
<% : %>
a refreshing Singha?
<% ; %>
</p>
]]>
</script>
你好,你好吗?
我可以为您效劳吗
一些好吃的农民?
令人耳目一新的辛哈?
]]>
您可以在单个文件中存储任意数量/数量的脚本块,我通常将它们与其余代码一起放入主
.js
。因为它们是标准的HTML脚本标记,所以它们也可以进入您的主页,或者通过AJAX加载并写入文档。我构建了一个轻量级模板管理器,可以通过AJAX加载模板,从而允许您将模板分离为更易于管理的模块。它还执行简单的内存缓存,以防止不必要的HTTP请求。(为了简洁起见,我在这里使用了jQuery.ajax)
然后,您将按如下方式使用此代码,通过回调处理模板数据:
Template.load('/path/to/template/file', function(tmpl) {
var output = Template.render(tmpl, { 'myVar': 'some value' });
});
Eric Feminella为jQote2插件编写了一个简洁的补充,使得加载外部模板更加容易。见他的帖子:我喜欢这种方法。您可以使用这样的闭包来清理它:App.Template=(function(){var TEMPLATES=[];return{load:…render:…};})();
var TEMPLATES = {};
var Template = {
load: function(url, fn) {
if(!TEMPLATES.hasOwnProperty(url)) {
$.ajax({
url: url,
success: function(data) {
TEMPLATES[url] = data;
fn(data);
}
});
} else {
fn(TEMPLATES[url]);
}
},
render: function(tmpl, context) {
// Apply context to template string here
// using library such as underscore.js or mustache.js
}
};
Template.load('/path/to/template/file', function(tmpl) {
var output = Template.render(tmpl, { 'myVar': 'some value' });
});