Templates JSRender:从转换器或自定义标记呈现另一个模板

Templates JSRender:从转换器或自定义标记呈现另一个模板,templates,jsrender,Templates,Jsrender,我从后端服务请求中获取HTML内容,该请求可能包括以下内容(非JSRender): <div>{{comp:someComponentId}}</div> {{comp:someComponentId} 或者我们可以通过以下方式接收: <div>{{comp someComponentId}}</div> {{comp someComponentId} 我想利用此语法在JSRender中使用转换器或标记来有效地将其转换为: <div&

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

<div>{{comp:someComponentId}}</div>
{{comp:someComponentId}
或者我们可以通过以下方式接收:

<div>{{comp someComponentId}}</div>
{{comp someComponentId}
我想利用此语法在JSRender中使用转换器或标记来有效地将其转换为:

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

标记/转换器是否执行呈现,或者是否可以迭代创建include以让JSRender对其进行评估。我如何做到这一点?

这是否符合您的要求

<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>

{{comp someid/}}
什么{{:foo}
$.views.tags(“comp”{
渲染:函数(id){
返回$(“#”+id).render(this.tagCtx.view.data);
}
});
var myTmpl=$.templates(“#myTmpl”),
数据={someid:“id1”,foo:“foo”},
html=myTmpl(数据);
$(“#page”).html(html);

谢谢!我试试看。我正在服务器端执行此操作,因此希望以下操作能够正常工作:返回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将作为函数(id)传入,您无需添加引号。为什么会破裂?它在上面工作。。。。在这种方法中,您不会创建一个模板字符串,
{{include tmpl=“someid”…}
。上面的操作在语义上应该等同于这样做……我可以更改服务请求,以获得{{comp:'someComponentId'}格式的片段,这样它就可以工作了。如果没有引号,someComponentId将被视为属性名,而不是字符串,这就是它中断的原因。我不能做$(“#myTmpl”).text(),因为它在服务器上。另外,出于性能原因,我们不能在服务器上进行大量的字符串操作。但是谢谢你的帮助!我现在有了一些有效的方法。你最初的问题太简洁了(至少对我来说)我还以为您想从属性名someComponentId获取id-这就是为什么我上面的示例代码有
{{comp someid/}}
数据={someid:“id1”,…}
。我现在明白了您所说的“someid就是id”的意思-但我们之前在讨论中有不同的目的。。。