我对你的应用做了一些改动。在您有两个在同一范围内Ember.Application
调用App
和操作的实例之前。Todo
默认情况下,Ember 应用程序使用body
元素作为rootElement
(您的应用程序将要渲染的位置),因此您的应用程序正在发生碰撞。
如果您确实需要在同一页面上运行两个应用程序,请使用Application#rootElement
通知选择器您希望应用程序呈现的元素。我会说当您有多个应用程序共享同一个文档时(如果这是您想要的),您应该避免使用body
as 。rootElement
根据您的图片,我认为您不需要两个应用程序,并且我假设您只想要 To Do 应用程序,所以我删除了App
,只留下了Todo
(请参阅固定的 jsbin)。
我注意到你所有的 HTML 都是静态的,而且你根本没有使用 Handlebars,还有一些不正确的 js 引用已经被修复。
而不是执行以下操作:
<section id="main">
<ul id="todo-list">
<li class="completed">
<input type="checkbox" class="toggle">
<label>Learn Ember.js</label><button class="destroy"></button>
</li>
<li>
<input type="checkbox" class="toggle">
<label>...</label><button class="destroy"></button>
</li>
<li>
<input type="checkbox" class="toggle">
<label>Profit!</label><button class="destroy"></button>
</li>
</ul>
<!-- more stuff-->
使用 Handlebars,因为它提供了{{each}}
帮助程序,它允许您像这样遍历您的集合:
<ul id="todo-list">
{{#each filteredTodos itemController="todo"}}
<li {{bindAttr class="isCompleted:completed isEditing:editing"}}>
{{#if isEditing}}
{{view Todos.EditTodoView todoBinding="this"}}
{{else}}
{{view Ember.Checkbox checkedBinding="isCompleted" class="toggle"}}
<label {{action "editTodo" on="doubleClick"}}>{{title}}</label>
<button {{action "removeTodo"}} class="destroy"></button>
{{/if}}
</li>
{{/each}}
</ul>
这将为您的控制器中的每个模型创建一个li
元素(在本例中,来自计算的)。filteredTodos
我强烈建议您深入了解指南以了解有关 ember 的更多信息。