gpt4 book ai didi

javascript - jsRender - 如何从嵌套模板调用外部模板

转载 作者:行者123 更新时间:2023-11-29 17:14:29 25 4
gpt4 key购买 nike

我真的是 jsRender 的新手(才几天),我只能说..我喜欢它!!

我发现一篇真正有用的文章是 this one作者:约翰爸爸

到目前为止,我已经能够做我想做的事(同一页面中的所有内容),但约翰在他的文章中说了一件事:

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”模板时,它又调用了 dropdownifelse 模板,它只是doenst 在这些模板中执行逻辑(我猜是因为它找不到它们)

这是我如何调用“_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 ,然后您将所有这些 promise 组合在一个 $.when() 中。

这是在 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 - 如何从嵌套模板调用外部模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com