如何在单独的文件中存储我的八字胡/把手模板
How to stock my Mustache / Handlebars templates in separate files?
我在一个项目上使用handlebars.js,我开始有相当数量的模板。现在它们存储在我的主模板app文件中,如下所示:
<script id="avatar_tpl" type="text/html">
bla bla bla {{var}} bla bla bla
</script>
我想知道是否有一种方法可以将它们放在一个单独的文件中,如。js文件或其他文件,以避免在我的源代码页中堆叠它们。
我知道有几种解决方案可以通过Ajax调用这些模板,但这似乎会给我带来太多不必要的请求。
谢谢
我创建和开源NodeInterval的这个完全相同的问题,太多的js模板在我的HTML页面。
它允许你把你所有的模板到一个模板文件夹组织在任何层次你喜欢。它具有内置的watch
功能,因此当您修改任何这些模板时,它会自动更新您的HTML页面。我将它与SASS一起用于我的CSS。
我每天都用它来处理下划线模板,但它也应该可以很好地处理小胡子模板:
https://github.com/krunkosaurus/NodeInterval你不能只是包含一个js文件与你的模板作为js变量?没有测试,只是在这里思考:
//in your html page
<script id="avatar_tpl" type="text/html" src="mytemplates.js"></script>
// then in your mytemplates.js file
var template_1 = "{{ content }}";
var template_2 = "{{ content }}";
// and you could use it like this back in html page
var template1 = Handlebars.compile(template_1);
var template2 = Handlebars.compile(template_2);
如果你正在使用jquery,你可以创建一个id为"template-holder"的不可见div
则使用:
$("#template-holder").load([url here])
将HTML加载到div中然后使用:
var templatestr = $("#template-holder").find("#avatar_tpl").html()
获取模板
:)
我不熟悉handlebars.js但是,你试过这个吗?:
<script id="avatar_tpl" type="text/html" src="myscript.html"></script>
我现在已经把我所有的脚本和模板集中到一个大的.js文件中用于几个项目。我使用基于java的构建工具ant来连接和管理我的js的各种处理脚本。
在javascript变量中存储大型模板的最大问题是javascript缺乏多行字符串。我通过使用类似python的三引号语法编写文件来处理这个问题:
var templateVariable = '''
<div>
<div></div>
</div>
'''
然后我通过下面包含的python脚本运行这个自定义语法的javascript文件,这将把它变成合法的javascript:
#!/usr/bin/env python
# encoding: utf-8
"""
untitled.py
Created by Morgan Packard on 2009-08-24.
Copyright (c) 2009 __MyCompanyName__. All rights reserved.
"""
import sys
import os
def main():
f = open(sys.argv[1], 'r')
contents = f.read()
f.close
split = contents.split("'''")
print "split length: " + str(len(split))
processed = ""
for i in range(0, len(split)):
chunk = split[i]
if i % 2 == 1:
processedChunk = ""
for i,line in enumerate(chunk.split("'n")):
if i != 0:
processedChunk = processedChunk + "+ "
processedChunk = processedChunk + "'"" + line.strip().replace("'"", "'''"").replace('''', '''''') + "'"" + "'n"
chunk = processedChunk
processed = processed + chunk
f = open(sys.argv[1], 'w')
f.write(processed)
f.close()
if __name__ == '__main__':
main()
通过这种方式,我可以在或多或少的纯html中编写模板,并将它们与应用程序代码一起部署到单个.js文件中。
我创建了一个Lazy Load javascript文件,只在需要时加载模板。它执行AJAX调用,但似乎工作得相当好。
var Leuly = Leuly || {};
Leuly.TemplateManager = (function ($) {
var my = {};
my.Templates = {};
my.BaseUrl = "/Templates/";
my.Initialize = function (options) {
/// <summary>
/// Initializes any settings needed for the template manager to start.
/// </summary>
/// <param name="options">sets any optional parameters needed</param>
if (options && options.BaseUrl) {
my.BaseUrl = options.BaseUrl;
}
};
my.GetTemplate = function (templateName, success, baseUrl) {
/// <summary>
/// makes a request to retrieve a particular template
/// </summary>
/// <param name="templateName">name of the template to retrieve</param>
/// <param name="success">event returning the success</param>
var template = my.Templates[templateName];
if (template == null) {
template = my.LoadTemplate(templateName, success, baseUrl);
}
else {
success(template, true);
}
};
my.LoadTemplate = function (templateName, success, baseUrl) {
/// <summary>
/// makes a request to load the template from the template source
/// </summary>
/// <param name="templateName">name of the template to retrieve</param>
/// <param name="success">event returning the success</param>
var root = baseUrl == null ? my.BaseUrl : baseUrl;
$.get(root + templateName, function (result) {
my.Templates[templateName] = result;
if (result != null && success != null) {
success(result, true);
}
});
};
return my;
} (jQuery));
$(function () {
Leuly.TemplateManager.Initialize();
});
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 我的单元测试选项是什么
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 我的职位回报太快了,如何做出承诺
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何识别我的网站中的慢速设备
- 如何将JSON数据导入我的ejs模板
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 知道为什么我的旋转木马不会自动更改图片吗
- 我的模板未被解析
- 无法将数据从firebase获取到我的html页面
- 角度图表;t显示在我的页面中
- 我的AngularJS表达式没有'不起作用
- 将电视直播频道从网站嵌入我的网站
- /undefined在我的404错误日志中多次出现
- 使用wikipedia api contentmodel返回未知的八字胡括号
- 如何在单独的文件中存储我的八字胡/把手模板
- 我如何正确地预增强与jQuery移动版的八字胡模板
- 使用下划线模板的八字胡样式函数求值