使用ember.js创建复杂的静态标记

时间:2013-08-09 16:55:44

标签: javascript ember.js

我正在尝试渲染我的应用程序模板,这个模板变得非常复杂,因此我想将其拆分为单独的<script type="text/x-handlebars">

我想我想使用{{view}}助手,但我不知道。假设我有这个:

<script type="text/x-handlebars" data-template-name="application">
    <div id="wrapper" class="clearfix">

        <hgroup>
            <header>
                <div class="logo"></div>
                <h1 id="facilityName">{{facilityName}}</h1>
                <div id="sessionInfo">
                    <a id="userName">{{user}}</a>
                    <a id="logOut" href="../logout">log out</a>
                </div>
            </header>
        </hgroup>

        {{view App.breadcrumbsView}}
    </div>
</script>

我想在上面的一个模板中加载下一个模板:

<script type="text/x-handlebars" id="breadcrumbs">
    <div id="breadcrumbs">
        <p>
            <a href="{{breadcrumbObj.page}}">Network</a>

            {{#each breadcrumbObj}}
                <span>&#62;</span><a {{bindAttr href="link"}}>{{name}}</a>
            {{/each}}
        </p>
    </div>
</script>

现在我正在尝试使用我的app.js

中的代码执行此操作
App.breadcrumbsView = Ember.View.create({
  templateName: 'breadcrumbs',
  breadcrumbObj: Util.breadcrumbs()
});

这不起作用我得到了未捕获错误:断言失败:无法在路径“App.breadcrumbsView”找到视图

由于

2 个答案:

答案 0 :(得分:1)

我认为您使用App关键字宣布了var。所以它在车把模板中不可见。

更改此

var App = Ember.Application.create();

到此

App = Ember.Application.create();

创建视图时,您必须使用extend而不是create。因为ember将处理对象生命周期,如:创建,销毁,添加和删除绑定等。

答案 1 :(得分:1)

@Marcio是对的,你应该.extend()让框架通过请求自动为你创建它。此外,当您扩展时,最佳做法是使用大写的名称,如App.BreadcrumbsView

请在此处查看demo如何以正确的方式正确执行此操作。

希望它有所帮助。