【问题标题】:JsRender: How to pass variables into a nested templateJsRender:如何将变量传递到嵌套模板中
【发布时间】:2012-07-04 08:17:30
【问题描述】:

我想在网页的不同部分使用嵌套模板。对于不同的部分,我需要从嵌套模板中的数组中获取一个值。我不能使用 for 循环,因为每个部分在网站上都有不同的类和位置。是否可以将变量传递到嵌套模板中?以下代码简化了我想要实现的目标:

<script id="myBtnTmpl" type="text/x-jsrender">
    <button class="btn">        
        {{:myData.myArray[INDEX_VARIABLE].btnName}}
    </button>
</script>

//  Here I want to use INDEX_VARIABLE = 0
<div class="BigButton">
    {{if myData tmpl="myBtnTmpl"/}}
</div>

//  Here I want to use INDEX_VARIABLE = 1
<div class="MediumButton">
    {{if myData tmpl="myBtnTmpl"/}}
</div>

//  Here I want to use INDEX_VARIABLE = 2
<div class="SmallButton">
    {{if myData tmpl="myBtnTmpl"/}}
</div>

另一个问题:使用嵌套模板时,是否可以在不使用 if 语法的情况下包含像 {{tmpl="myBtnTmpl"/}} 这样的嵌套模板?

谢谢!

【问题讨论】:

标签: javascript jquery jsrender


【解决方案1】:

是的,您可以在使用tmpl="myBtnTmpl"的标签上设置命名模板参数(无论是{{if}}标签还是{{for}}标签):

<div class="BigButton">
    {{for myData ~arrIndex=0 tmpl="myBtnTmpl"/}}
</div>

然后,您可以像访问已注册的帮助程序一样访问模板参数 - 通过将“~”附加到名称。

<button class="btn">        
    {{:myData.myArray[~arrIndex].btnName}}
</button>

顺便说一句,您还可以使用 render 方法传递变量和辅助函数(除了数据)。我刚刚添加了一个新的sample demo 来表明这一点。

因此,这意味着无论您是从代码中呈现模板,还是像上面的嵌套模板一样以声明方式呈现模板,模板都可以类似地“参数化”。

【讨论】:

  • 您好鲍里斯,感谢您的快速回复。我按照你的例子,我把 ~arrIndex=0 放在标签上。但是,当我尝试在模板中访问它时,模板似乎没有找到该变量。我使用的是最新的提交计数 19。它对你有用吗?
  • 感谢您仍然支持jsRender,您应该在官方页面上放一个showCase
  • @boban984:您的意思是使用 JsRender 或 JsViews 显示指向网站的链接?
  • @BorisMoore 是的,我觉得 jsRender 被低估了。我一直在使用它,因为它处于 alpha 阶段,在 jsViews 出现之前 :) 当时没有 Angular 或 Ember、Backbone 和Knockout 刚刚开始流行,但 jsRender 更能满足我们的需求,所以这就是我们选择它的原因。我还在使用它...检查Solaborate
  • @BobanStojanovski:谢谢 - 很高兴听到。当然,我知道有很多人在做很酷的事情并使用 JsRender 或 JsViews 制作很酷的网站——但很难找出他们是谁,或者建立一个此类网站的列表。他们中的许多人也是强大的内部网站 - 不是面向公众的网站。这就是为什么到目前为止我还没有尝试建立一个“画廊”......(如果您对此有进一步的想法,我很乐意通过电子邮件交流 - borismoore@gmail.com)
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多