javascript – jsRender – 如何从嵌套模板调用外部模板
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – jsRender – 如何从嵌套模板调用外部模板,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3906字,纯文字阅读大概需要6分钟。
内容图文
![javascript – jsRender – 如何从嵌套模板调用外部模板](/upload/InfoBanner/zyjiaocheng/699/248d7c092f8548fb8da3cdea2d65d765.jpg)
我是jsRender的新手(只有几天),我只能说..我喜欢它!
我发现一篇非常有用的文章是john papa的this one
到目前为止,我已经能够做我想做的事情(同一页面中的所有内容),但John在他的文章中说:
If a template is defined inside of a tag in the same page
that it’s used, then the template isn’t as reusable as it could be.
让我想尝试看看是否可以将我的所有模板移动到单独的文件中.
按照John的指示,我创建了一个jsrender.utils.js文件,该文件使用$.get函数检索模板.
现在问题是它只适用于不会从内部调用其他模板的模板,比如我的模板:
_estructura.tmpl.html
<tr>
<td>
{{!------------------------------Start - Estructure------------------------}}
<fieldset id="e{{>nivelEst}}">
<legend>"Estructura para Retorno {{>nivelEst}}"</legend>
<div>
<span>Tipo Expresion</span>
<select id="tipoExp_e{{>nivelEst}}">
{{for tipoExp tmpl="#dropdown" /}}
</select>
</div>
<hr />
{{!-------------------------Start- Sentence-----------------------}}
<fieldset id="{{>idSent}}">
<div>
<select id="subTipoExp_{{>idSent}}">
{{for subTipoExp tmpl="#dropdown" /}}
</select>
</div>
<br />
<div>
{{!-----------------Start - Expression--------------------}}
<table id="tbExp_{{>idSent}}" class="list" align="center" cellpadding="0" cellspacing="0">
<tbody>
{{if idSent tmpl="#if" /}}
</tbody>
<tfoot>
{{if idSent tmpl="#else" /}}
</tfoot>
</table>
{{!----------------------End - Expression----------------}}
</div>
</fieldset>
{{!-------------------------End - Sentence -------------------------}}
</fieldset>
{{!----------------------------End - Estructure -------------------------}}
</td>
</tr>
在这里,我需要调用其他模板,例如:#if,#else和#dropdown
它们都很简单,直接调用时效果很好
_dropdown.tmpl.html
<option value="{{>value}}">{{>text}}</option>
_if.tmpl.html
<tr>
<td>
<span class="rightAlig">IF(</span><input type="text" id="exp1_tbExp_{{>idSent}}" class="conditionInput" />
</td>
<td>
:<input type="text" id="ret1_tbExp_{{>idSent}}" />)
</td>
<td>
</td>
</tr>
_else.tmpl.html
<tr>
<td colspan="3" style="text-align: left;">
<input type="button" id="btnA?adir_tbExp_{{>idSent}}" value="+ Add" class="button small blue" />
</td>
</tr>
<tr>
<td colspan="3">
<span>Else</span>(<input type="text" id="else_tbExp_{{>idSent}}" />)
<input type="hidden" id="c_tbExp_{{>idSent}}" value="1" />
</td>
</tr>
当我调用“_estructura.tmpl.html”模板时,该模板又调用下拉列表,if和else模板,它只是执行这些模板中的逻辑(我想因为它找不到它们)
这是我如何调用“_estructura.tmpl.html”模板:
var data_Est = new Object();
data_Est.nivelEst = counter;
data_Est.idSent = idSent;
data_Est.tipoExp = tipoEsp_data;
data_Est.subTipoExp = subTipoEsp_data;
my.utils.renderExternalTemplate("estructura", "#tbEstructuras >tbody", data_Est);
这是主模板的两个下拉列表的数据:“tipoEsp_data”和“subTipoEsp_data”
var tipoEsp_data = [{ "value": 1, "text": "Expresión Condicional" }, { "value": 2, "text": "Lógico/Matemática" }, { "value": 3, "text": "Matriz de doble Entrada" }, { "value": 4, "text": "árbol de decisiones"}];
var subTipoEsp_data = [{ "value": 1, "text": "Si.Pero.Si" }, { "value": 2, "text": "Si" }, { "value": 3, "text": "Fórmula Matemática"}];
正如我在开始时告诉你的那样,我真的对jsrender很新,如果能帮助解决这个问题,那就太棒了.
提前致谢.
解决方法:
有一些文档主题可以解释如何远程加载模板:
http://www.jsviews.com/#samples/jsr/composition/remote-tmpl
http://www.jsviews.com/#compiletmpl
您需要在调用render()或link()之前加载所有模板.您的renderExternalTemplate()调用需要返回一个promise,然后您在$.when()中组合所有这些promise.
以下是它在sample中的完成方式:
function showPeople(people) {
$.when(
lazyGetTemplate("people"),
// '<div>{{:name}} lives in {{for address tmpl="address" /}}</div>'
// fetched from www.jsviews.com/samples/resources/templates/people.js
lazyGetTemplate("address")
// Template: '<b>{{>city}}</b>'
// fetched from www.jsviews.com/samples/resources/templates/address.js
)
.done(function() {
// Render once all templates for template composition are loaded
var html = $.templates.people.render(people);
$("#peopleList").html(html);
});
}
内容总结
以上是互联网集市为您收集整理的javascript – jsRender – 如何从嵌套模板调用外部模板全部内容,希望文章能够帮你解决javascript – jsRender – 如何从嵌套模板调用外部模板所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。