在客户端上编译和渲染复杂的Dust.js模板
compiling and rendering complex Dust.js templates on the client
我试图用客户端的嵌套部分动态编译和渲染Dust模板,但我一直得到"错误:找不到模板:[templatePath]"。如果我使用的子模板不引用任何部分(例如/templates/includes/childTemplate.dust),但不引用更高级别的主模板(例如/ttemplates/main.dust?
var model = { ... };
$.get('/templates/main.dust', function(tpl) {
var compiled = dust.compile(tpl, 'mainTemplate');
dust.loadSource(compiled);
dust.render('mainTemplate', model, function(err, output) {
if (err) {
console.log(err);
}
$('#target').html(output);
});
});
Dust部分在渲染时解析,而不是在编译时解析,因此无法预编译为主模板。
相反,Dust为您提供了一种方法,告诉它如何通过使用dust.onLoad
函数加载其他模板。
dust.onLoad = function(templateName, callback) {
// naive jQuery loading of a new template
$.get('/templates/' + templateName + '.dust', function(data) {
callback(null, data);
});
};
如果您在收到模板后需要编译模板,请将其作为第二个参数传递给callback
,Dust将对其进行编译。如果您正在加载预编译模板,只需通过调用dust.loadSource(data)
然后调用callback()
来评估预编译模板。
您可能希望在工作流中加入模板预编译步骤,也许可以使用Dust附带的dustc
编译器,这样您就不必在客户端上进行编译(这很慢,而且必须包含dust-full.js
而不是dust-core.js
)。
您可以考虑将Dust及其模板加载为AMD模块。看见http://www.dustjs.com/guides/setup/#amd。如果您这样做,Dust将使用require
自动为您连接onLoad
。
Dust repo提供了一些在浏览器中处理Dust的不同方法的基本示例。请参阅examples/basic browser和examples/amd。
相关文章:
- 在Redux中,我应该在哪里编写复杂的异步流
- 将复杂对象从angular js传递到web api,它总是返回404
- dropdown.js中的复杂事件处理
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 相当复杂的Regex
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 加速我的复杂函数绘图仪(canvas+javascript)
- JQuery Mobile Javascript复杂方程式
- 如何使用javascript过滤复杂的json对象
- 复杂量角器选择器
- JavaScript中的复杂字符串匹配
- 有关PouchDB的复杂startkey/endkey查询未返回预期结果
- 复杂的javascript函数,我该如何使用它
- TinyMCE:添加复杂格式
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- 使用复杂数组时Jquery自动完成功能不起作用
- 解析复杂的json-jquery
- 使用angular显示复杂json中的列表
- 关于复杂JSON解析(angularjs和javascript)的问题
- 在客户端上编译和渲染复杂的Dust.js模板