使用把手从预编译的模板渲染嵌入的部分模板?

时间:2014-08-25 20:34:33

标签: javascript node.js handlebars.js precompiled-templates

我有一个预编译的把手模板,可以按预期渲染。

我决定在我预编译的模板中添加一个嵌入式(非预编译)部分引用,但部分内容无法正确呈现。

最终结果是嵌入的部分内容包含在渲染的HTML中(我想我的部分是“部分”工作:-D),但是:

  1. 部分名称也包含在每一行
  2. 部分中的表达式未填充我的数据
  3. 这是呈现的HTML。下面列出了部分名为templateBodyItemNumberPartial的3行(部分名称似乎以每行输出为前缀),并且<span>中没有数据呈现:

    <div class="templateBodyItem">
        templateBodyItemNumberPartial
    templateBodyItemNumberPartial            <span class="templateBodyItemNumber"></span>
    templateBodyItemNumberPartial         
        this is my body text
        <div class="templateBodyItemFooter">this is my footer text</div>
    </div>
    

    这是引用templateBodyItemNumberPartial部分的主要预编译模板:

    {{! templates/nameWithPartial.handlebars }}
    {{! precompiled via: handlebars ./templates/nameWithPartial.handlebars -f external_template_with_partial.js }}
    <div class="templateBodyItem">
        {{> templateBodyItemNumberPartial }} 
        {{ templateBodyItem }}
        <div class="templateBodyItemFooter">{{ templateBodyFooter }}</div>
    </div>
    

    这是.html文件,我在其中定义/注册部分并调用我预先编译的nameWithPartial模板:

    <script type="text/javascript" src="./handlebars-v2.0.0-alpha.4.js"></script>
    <script type="text/javascript" src="./external_template_with_partial.js"></script>
    
    <script id="templateBodyItemNumberPartial" type="text/x-handlebars-template">
        <span class="templateBodyItemNumber">{{ templateBodyItemNumber }}</span>
    </script>
    
    var templateBodyObject = {
        templateBodyItemNumber : 4 ,
        templateBodyItem : 'this is my body text' ,
        templateBodyFooter : 'this is my footer text'                                    
    };
    
    // verify that the partial html is what I think it should be
    console.log( $( '#templateBodyItemNumberPartial' ).html() );
    //=> <span class="templateBodyItemNumber">{{ templateBodyItemNumber }}</span>
    
    Handlebars.registerPartial( 'templateBodyItemNumberPartial' , $( '#templateBodyItemNumberPartial' ).html() );
    var templateHtml = Handlebars.templates.nameWithPartial( templateBodyObject );
    

    我正在尝试使用嵌入式部分来测试部分在把手中的工作方式。

    任何人都可以确认是否支持此功能吗?如果引用部分的主模板是预先编译的,我是否必须使用预编译的部分?

    非常感谢!

    顺便说一下,我正在运行Win7 Pro 64位,但希望这不是问题...

1 个答案:

答案 0 :(得分:0)

这个问题似乎可以通过将车把回滚到@ 1.3.0来解决。

我在上面更改了一行代码:

<script type="text/javascript" src="./handlebars-v2.0.0-alpha.4.js"></script>

为:

<script type="text/javascript" src="./handlebars-v1.3.0.js"></script>

然后我将把手CLI回滚到@ 1.3.0:

$ npm install -g handlebars@1.3.0

并重新编译外部模板:

$ handlebars ./templates/name_with_partial.handlebars -f external_template_with_partial.js

我猜是有部分问题和@ v2.0.0-alpha.4或者这个最新版本的部分功能已经改变了。我应该得到使用名称中带有“alpha”的东西。 :)

哦,谢谢你的聆听。