1

我有以下代码

    Todos = Ember.Application.create();

    Todos.Todo = Ember.Object.extend({
        title: null,
        isDone: false
    });

    Todos.TodosController = Ember.Object.extend({
        // We need an array to hold our Todo objects
        todos: Ember.A(),

        init: function(){
            debugger;
            var items = this.get('todos');
            items.addObject(Todos.Todo.create({title: "This is an Ember Item"}));
            items.addObject(Todos.Todo.create({title: "This is another Ember Item"}));
        },

        remainingCount: function(){
            return this.get('todos').filterProperty('isDone', false).length;
        }.property('todos.@each.isDone')

    });

    Todos.controller = Todos.TodosController.create();

    Todos.TodoView = Ember.View.extend({
        templateName: 'todos'
    });

</script>

我在 thml 中定义了以下车把挂钩。但由于某种原因,模板没有被渲染。当我检查时,Handlebars.templates我看到返回的对象中列出了待办事项。我在这里想念什么。

在此处输入图像描述

编辑

是否可以在 .handlebars 文件中定义模板?

编辑

我在 app.js 中做了这个。

$.extend(Ember.TEMPLATES, Ember.TEMPLATES, Ember.Handlebars.templates);

但这似乎也无济于事。如下图所示,模板现在列在Ember.TEMPLATES. 但由于某种原因,它没有接他们。

在此处输入图像描述

另外我在body标签之间没有任何html。我不确定我是否应该在那里有任何东西。

<body></body>

4

2 回答 2

1

已经在这里回答了

要预编译车把模板,您必须安装ember-precompile 包

如果您需要 make 实用程序(在 Mac 上)安装它

然后将预编译的模板包含到您的 index.html 中,如下所示:

    <script type="text/javascript">
        App = Ember.Application.create({});
    </script>
    <!-- templates -->
    <script src="js/templates/templates.js"></script>
    <!-- app init -->
    <script type="text/javascript">
        App.initialize();
    </script>
于 2013-08-11T17:48:44.767 回答
0

@MilkyWayJoe

你所说的关于应用程序模板的内容对我有帮助,谢谢。我认为我的预编译器是导致我出现问题的原因。我现在可以在应用程序模板中查看我的部分内容。但是,由于linkTo某种原因,它似乎不起作用。linkTo如果我在 html 页面中声明模板,则有效!

这是上下文中的预编译器。 http://blog.selvakn.in/2012/05/precompiling-handlerbars-tempates-with.html

我现在可以查看文件了。但是,需要添加以下几行app.js才能使其正常工作。

// To register partials
$.each(Ember.Handlebars.templates, function(i, template){
    if(i.indexOf('_') === 0){
        Ember.Handlebars.partials[i.substring(1, i.length)]  = template;
    }
});

// To let Ember.Handlebars know about the newly added templates
$.extend(Ember.TEMPLATES, Ember.TEMPLATES, Ember.Handlebars.templates);

帮助我的是首先将模板一次添加到 html 正文中,然后将它们移动到自己的文件中。另请记住,这data-template-name不是您可以忽略的属性。如果一个人这样做,它会导致各种各样的问题。

编辑

这个节点包效果更好。

Emberjs Handlebars 预编译

于 2013-03-21T18:30:10.040 回答