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

2023-12-07

我对 jsRender 真的很陌生(才几天),我只能说..我喜欢它!

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

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

如果模板是在同一页面的标签内定义的 如果它已被使用,那么该模板就无法像它应有的那样可重用。

让我想尝试看看是否可以将所有模板移动到单独的文件中。

按照约翰的指示我创建了一个jsrender.utils.js使用以下命令检索模板的文件$.get功能。

Now 问题是它仅适用于不从内部调用其他模板的模板,例如我的模板:

_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”模板时,该模板又调用dropdown, if, and 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()调用需要返回一个承诺,然后您将所有这些承诺组合在一个$.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);
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsRender - 如何从嵌套模板调用外部模板 的相关文章

随机推荐

  • `import` 和 `#include` 之间的区别? CP20

    我不明白为什么 I saw import std core here I can t import std I can t import std iostream I can include
  • linux C++ 套接字选择循环

    我在使用套接字时遇到了一些问题 当循环时 除了第一个循环之外 我没有接收到数据 每次都会超时 如果我关闭并重新打开每个循环的套接字 尽管我似乎正确获取了数据 有什么想法吗 不关闭循环的示例 int socketHandle socket A
  • 仅计算某一特定时区的时区偏移量

    我正在尝试为一位在德国在线教学的人构建一个应用程序 我想将这个人的日程存储在一系列约会开始时间中 例如 let schedule new Date currentDate T07 00 00Z new Date currentDate T0
  • 将关联表展平为多值列?

    我有一张表 其中仅包含产品 ID 和类别 ID 产品可以属于多个类别 如何将类别 ID 平铺到产品列中 因此我以以下内容结束我们 id name desc categories 1 test1 lorem 1 3 4 23 2 test2
  • C# 文件移动和覆盖[重复]

    这个问题在这里已经有答案了 我正在开发一个多线程应用程序 我的代码中有某处 File Delete sidetapedata File Move sidetapedata2 sidetapedata sidetapedata and sid
  • R hist 与 geom_hist 断点

    我在 R 中使用 geom hist 和直方图 具有相同的断点 但得到不同的图表 我进行了快速搜索 有谁知道定义中断是什么以及为什么它们会有所不同 这些产生两个不同的情节 set seed 25 data lt data frame Mos
  • 无法修改冻结的数组。(FrozenError)

    当我启动服务器时padrino start 出现这个错误 C Ruby27 x64 lib ruby gems 2 7 0 gems padrino core 0 15 1 lib padrino core application rb 3
  • 如果从 Block 调用的方法使用 self,我是否需要使用弱 self 指针?

    Using self 在块中会导致保留循环 因此我需要创建对weakSelf 我明白这一点 BUT 如果从我的块中我调用一个使用的方法self 这也会导致保留周期吗 例如 如果我重新加载UITableView从一个街区和我的一些UITabl
  • Python:从字符串中删除一个字符

    我想删除字符串中的第 5 个字符 所以我做了 删除线 5 并得到 类型错误 str 对象不支持项目删除 所以不 我想知道是否有不同的有效解决方案来解决这个问题 字符串在 Python 中是不可变的 因此您无法就地更改它们 当然 您可以将字符
  • 获取 int 或 str 形式的用户输入

    我对 python 很陌生 相信我 我一直在无休止地寻找解决方案 但我就是找不到 我有一个包含监控图列表的 csv 使用下面的代码 我已经能够显示 2dlist 并让用户根据列表索引输入一个数字来选择特定的绘图 共有 11 个 但是当提示用
  • 如何在VIM中用CTRL-]实现自己的标签跳转?

    If h is used in VIM it will automaticall follow links via CTRL opening new help topics and maintaining tag jumps list CT
  • 使用 beautifulsoup 解析 HTML 页面

    我开始使用 beautifulsoup 来解析 HTML 例如对于网站 http en wikipedia org wiki PLCB1 import sys sys setrecursionlimit 10000 import urlli
  • 从 PDF 文档中删除超链接 (iTextSharp)

    我正在尝试利用 iTextSharp 该产品非常新 从 PDF 文档中删除超链接 有谁知道这是否可能 我一直在研究 API 但没有找到明显的方法来做到这一点 我的问题是 我正在对一个嵌入 iframe 中的 PDF 的系统进行维护 并且 P
  • 如何使用 d3.js 在折线图上的某个点显示图标

    我正在使用 d3 创建一个简单的折线图 但我想显示一个很棒的图标 例如 fa arrow up 而不是沿路径的标准点 我尝试过以下 var setDirectionalPrediction function points points ea
  • 你能在 CSS 渐变中添加噪音吗?

    是否可以在 CSS 中的渐变中添加噪声 这是我的径向渐变代码 body color 575757 font 14px 21px Arial Helvetica sans serif background color 2f3b4b backg
  • 如何返回 DocumentSnapShot 作为方法的结果?

    采用 DocumentSnapShot DocumentsnapShot 参数的自定义对象 也是来自 Firebase 的内部对象 它检索快照并将值设置为我的自定义模型也有其参数 DocumentSnapShot 文档napShot 但是
  • 在 iOS 应用程序中自动连接到 BLE 设备

    我正在编写一个 iOS 应用程序 它将使用低功耗蓝牙 BLE 与设备进行通信 当我连接的设备超出范围时 我的应用程序将收到断开连接事件 但当设备返回范围时 我没有收到任何连接事件 请建议任何检测设备何时返回范围的方法 当您收到设备不再可达的
  • Simba Mongodb ODBC 驱动程序:返回的数据与预期数据长度不匹配

    我们使用 Simba Mongodb ODBC 驱动程序连接到 Mongo 数据库并进行 sql 查询 我使用 psql 在 Linux 上测试了连接 并且能够执行查询 当我的客户尝试通过 Microsoft SQL Server Mana
  • Django迁移依赖项引用不存在的父节点

    我在 Django 迁移方面遇到问题 我收到此错误 django db migrations exceptions NodeNotFoundError 迁移user 0050 merge 20170523 1254依赖项引用不存在的父节点
  • jsRender - 如何从嵌套模板调用外部模板

    我对 jsRender 真的很陌生 才几天 我只能说 我喜欢它 我发现真正有用的一篇文章是this one作者 约翰 帕帕 到目前为止 我已经能够做我想做的事 同一页面中的所有内容 但约翰在他的文章中说了一件事 如果模板是在同一页面的标签内