我正在尝试使用jsmart在客户端呈现Smarty 3个模板。如果您对它们没有经验,请继续阅读,因为它可能只是一个简单的JavaScript错误。
我创建模板(我通过AJAX接收),然后根据文档呈现它(传递数据):
var template = new jSmart(templateReceivedViaAJAX);
var content = template.fetch({"firstname":"adam", "secondname":"lynch"});
然后我只是将渲染的输出粘贴在div
:
$('#dest').html(content);
尝试呈现包含include
,extends
等的模板时出现问题
每当jSmart遇到任一模板包含标记时,它都会调用jSmart.prototype.getTemplate()方法并向其传递tag的file参数值。该方法必须返回模板的文本。
getTemplate()的默认实现会引发异常。因此,jSmart用户可以覆盖此方法并提供模板文本。
getTemplate()
函数:jSmart.prototype.getTemplate = function(name) {
$.ajax({type: 'GET', url: name, async:false, success: function(data) {
console.log('got template at '+name+'. The following is the contents:');
console.debug(data);
return data;
}});
}
include
调用的父模板时的控制台输出:<div class="row">
<label for="second" class="span4">Second Name:</label>
<input type="text" class="span4" placeholder="{$secondname}" id="second" />
</div>
<p>B;lsdsfasfsfds</p>
Uncaught Error: No template for /bundles/templatedemo/templates/form_include.html.smarty
extend
调用的子模板时的控制台输出:got template at /bundles/templatedemo/templates/form.html.smarty. The following is the contents: templates:58
<form class="well">
<div class="row">
<label for="first" class="span4">First Name:</label>
<input type="text" class="span4" placeholder="{$firstname}" id="first" />
</div>
{block name=form_include}{/block}
<input type="submit" class="btn btn-inverse" />
</form>
Uncaught Error: No template for /bundles/templatedemo/templates/form.html.smarty
(expanded:)
S
(anonymous function)
jSmart.fetch
(anonymous function)
f.event.dispatch
f.event.add.h.handle.i
如果模板内容预先存在(如果它们是硬编码的,而不是通过AJAX检索),则继承有效。
答案 0 :(得分:0)
使用函数指针而不是匿名函数:
function foo()
{
$.ajax({type: 'GET', url: foo.url, async:false, success: bar});
}
function bar(data)
{
console.log(['got template at', foo.url, 'The following is the contents:']);
console.debug(data);
return data;
}
foo.url = "http://www.stackoverflow.com";
jSmart.prototype.getTemplate = foo;