2012-08-08 79 views
3

如何在车把模板中创建模板?
那是我的模板:模板内的车把模板

<script type="text/x-handlebars-template" id="animal-template"> 
    <div class="locationSelect"> 
    {{content}} 
    </div> 
</script> 
<script type="text/x-handlebars-template" id="cat-template"> 
    <div> 
    I am cat 
    </div> 
</script> 
<script type="text/x-handlebars-template" id="dog-template"> 
    <div> 
    I am dog 
    </div> 
</script> 

我想在动物模板中运行(CAT-模板或狗模板)加载拨款模板。我怎样才能做到这一点?

回答

7

局部模板来当你需要在几个不同的环境下使用一个Handlebars.js模板时,这个功能很方便

<script id="people-template" type="text/x-handlebars-template"> 
    {{#each people}} 
    {{> person}} 
    {{/each}} 
</script> 

<script id="person-partial" type="text/x-handlebars-template"> 
    <div class="person"> 
    <h2>{{first_name}} {{last_name}}</h2> 
    <div class="phone">{{phone}}</div> 
    <div class="email"><a href="mailto:{{email}}">{{email}}</a></div> 
    <div class="since">User since {{member_since}}</div> 
    </div> 
</script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
    var template = Handlebars.compile($("#people-template").html()); 
    Handlebars.registerPartial("person", $("#person-partial").html()); 

    template(yourData); 
    } 
</script> 

http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers

+0

我们通常不会在这里链接“仅链接”答案,但您提供的不仅仅是链接。可能这是关于“最简单”的有效答案,即FYI。欢迎! – 2013-12-19 00:50:20

2

您可以根据所呈现的项目计算templateName的项目视图属性:

App.AnimalView = Ember.View.extend({ 
    templateNameBinding: function() { 
    var kind = this.get('animal.kind'); 
    return '%@-template'.fmt(kind); 
    }.property('animal.kind') 
}); 

然后在容器模板,通过他们的观点呈现的项目:

<script type="text/x-handlebars-template" id="animal-template"> 
    <div class="locationSelect"> 
    {{#for animal in content}} 
    {{view App.AnimalView animalBinding="animal"}} 
    {{/for}} 
    </div> 
</script> 
+1

其实我要寻找一个解决方案,因为我做了这个的jQuery插件,不依赖于灰烬。 – Naor 2012-08-09 08:15:41

+2

在这种情况下,你不应该把你的问题标记为[tag:ember.js] ... :-) – 2012-08-09 08:24:27

+0

我认为Ember.js用户可能知道如何解决它没有烬。:)我将删除烬标签。 – Naor 2012-08-09 11:01:32