【问题标题】:JSRender: Render another template from converter or custom tagJSRender:从转换器或自定义标签呈现另一个模板
【发布时间】:2019-11-27 22:55:18
【问题描述】:

我从后端服务请求中获取 HTML 内容,其中可能包含以下内容(非 JSRender):

<div>{{comp:someComponentId}}</div>

或者我们可以这样接收:

<div>{{comp someComponentId}}</div>

我想利用这种语法在 JSRender 中使用转换器或标签来有效地将其转换为:

<div>{{include tmpl="someComponentId"/}}</div>

标签/转换器是否进行渲染,或者它是否可以迭代地创建包含以让 JSRender 评估它。我如何做到这一点?

【问题讨论】:

    标签: templates jsrender


    【解决方案1】:

    这是你想要的吗?

    <script id="myTmpl" type="text/x-jsrender">
      {{comp someid/}}
    </script>
    
    <script id="id1" type="text/x-jsrender">
      what {{:foo}}
    </script>
    
    <div id="page"></div>
    
    <script>
      $.views.tags("comp", {
        render:  function(id) {
          return $("#"+id).render(this.tagCtx.view.data);
        }
      });
    
      var myTmpl = $.templates("#myTmpl"),
        data = { someid: "id1", foo: "FOO" },
        html = myTmpl(data);
      $("#page").html(html);
    </script>
    

    【讨论】:

    • 谢谢!我会试一试。我正在做这个服务器端,所以希望以下内容可以工作:return jsrender.render[id].render(this.tagCtx.view.data);
    • 我面临两个问题。我得到的内容可以是 {{comp:someid}} 或 {{comp someid}}。第一个问题是,作为一个标签,它会中断,因为它没有 / 结束斜线。第二个问题是,someid 是 id,它会中断,因为它周围没有引号。
    • 如果你不能让它在模板中呈现出有效的语法,那么它显然会失败。你可以做var templateString = $("#myTmpl").text(),然后按摩字符串以产生右斜杠(templateString2),然后myTmpl = $.templates(templateString2)。通过像上面那样声明 tag.render() 方法,然后 someid 作为 function(id) 传入,您不需要添加引号。为什么会断?它在上面工作......在这种方法中,您不会创建模板字符串{{include tmpl="someid"...}}。以上在语义上应该等同于这样做......
    • 我可以更改服务请求以获取
      {{comp:'someComponentId'}}
      格式的片段,以便它可以工作。没有引号, someComponentId 被视为属性名称,而不是字符串,这就是它中断的原因。而且我不能做 $('#myTmpl").text(),因为它在服务器上。另外,出于性能原因,我们不能在服务器上做很多字符串操作。但是感谢您的帮助!我现在有一些可行的方法。
    • 你原来的问题太简洁了(至少对我来说),我原以为你是想要从属性名 someComponentId 中获取 id - 这就是为什么我的例子上面的代码有{{comp someid/}}data = { someid: "id1", ...}。我现在理解你所说的“someid IS the id”的意思 - 但我们之前在讨论中处于不同的目的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2013-10-18
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多