【问题标题】:pass a dom level js object to a template function using jsrender使用 jsrender 将 dom 级别的 js 对象传递给模板函数
【发布时间】:2013-11-11 16:34:41
【问题描述】:

我只是想将模板填充的 javascript 对象传递给辅助函数。我查看了有关将辅助对象传递给循环的对话,但没有找到任何直接解决以下示例的内容。

<script type="text/javascript">
    // an object set by the template
    var SomeObject = {};
    SomeObject.Id=6;
</script>
<script id = "SomeTemplate" type="text/html">
    <div id="somegroup_{{>Id}}" class="main">
        <img id="somegroup_img_{{>Id}}" class="mainImg" src="{{: ~fltrOAMnImgs_hlp(Images, SomeObject)}}"> 
    </div>
</script>

当前上面的代码没有将 SomeObject 传递给 helper func。 我怎么能用新的 jsrender 库做到这一点?

【问题讨论】:

    标签: javascript jquery jquery-templates jsrender


    【解决方案1】:

    如果您想在模板中提供对 SomeObject 的访问权限,则必须将该对象作为帮助程序传入。有一些不同的方法可以做到这一点,具体取决于您是否希望它对所有模板全局可用,仅用于此模板,或者仅用于此 render() 调用。请参阅:Register helpers, converters, tags... 下的 $.views.helpers() 主题

    例如,如果您通过渲染调用将其传入,则使用“myObject”之类的名称:

    myTemplate.render(myData, {myObject: SomeObject});
    

    然后你可以像~myObject一样引用它:

    <img ... src="{{: ~fltrOAMnImgs_hlp(Images, ~myObject)}}">
    

    另请参阅此相关答案:Trying to run a function on an array in a, for loop, using jsrender

    【讨论】:

    • 不幸的是,当我试图通过这个时:var AdUnit = {}; AdUnit.Id = 6; $("#MOBILELARGE").html($("#mobileLargeTemplate").render(currentOffer, AdUnit));模板运行时 var AdUnit.Id 出现未定义
    • 如果您将 AdUnit 作为选项传递,上下文变量将为 ~id。如果您希望将整个 AdUnit 对象作为变量 ~AdUnit 进行访问,那么您需要将其作为 .render( currentOffer, {AdUnit: AdUnit} ) 传入 - 因此 AdUnit 是您传入的选项对象的属性。 (就像我上面的例子中的 ~myObject 一样)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多