我正在浏览ember.js指南以了解Ember,我正在使用ember.js,ember-data.js和handlebars.js的最新版本。我能够成功设置一个在视图之间切换的基本导航。但是,在尝试将模型与{{#each model}}
集成时,我收到一条错误消息:Uncaught TypeError:Object#没有方法'map'
许多人似乎已经提出了相关问题,但解决方案一直是更新我已经完成的ember版本。
我相信已经精确地遵循了教程,到目前为止我的代码如下。
App = Ember.Application.create();
App.Store = DS.Store.extend({
revision: 12,
// Says we are specifying all models in js
adapter: 'DS.FixtureAdapter'
});
App.Router.map(function() {
this.resource('posts');
this.resource('about');
});
App.PostsRoute = Ember.Route.extend({
model: function() {
return App.Post.find();
}
});
App.Post = DS.Model.extend({
title: DS.attr('string'),
author: DS.attr('string'),
intro: DS.attr('string'),
extended: DS.attr('string'),
publishedAt: DS.attr('date')
});
App.Post.FIXTURES = ({
id: 1,
title: 'Book Title',
author: 'Dave',
publishedAt: new Date('12-27-2012'),
intro: 'This is an introduction to the book',
extended: 'This is an even longer introduction to the book'
}, {
id: 2,
title: 'Book Title 2',
author: 'James',
publishedAt: new Date('08-13-2012'),
intro: 'This is an introduction to another book',
extended: 'This is an even longer introduction to another book'
});
相关标记:
<script type="text/x-handlebars">
<div class="navbar">
<div class="navbar-inner">
{{#linkTo 'index' classNames='brand'}}Brand{{/linkTo}}
<ul class="nav">
<li>{{#linkTo 'about'}}About{{/linkTo}}</li>
<li>{{#linkTo 'posts'}}Posts{{/linkTo}}</li>
</ul>
</div>
</div>
{{outlet}}
</script>
<script type="text/x-handlebars" id="about">
<div class="about">
<p>Here is some text about the page</p>
</div>
</script>
<script type="text/x-handlebars" id="posts">
<div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<table class='table'>
<thead>
<tr><th>Recent Posts</th></tr>
</thead>
{{#each model}}
<tr>
<td><a href="#">{{title}} <small class='muted'>by {{author}}</small></a></td>
</tr>
{{/each}}
</table>
</div>
<div class="span9">
</div>
</div>
</div>
</script>
非常感谢所有的帮助,如果这个问题的格式很糟糕也很抱歉 - 这是我的第一个问题!干杯!
答案 0 :(得分:0)
尝试使用控制器而不是模型来迭代阵列控制器中的模型。
{{#each controller}}
<tr>
<td><a href="#">{{title}} <small class='muted'>by {{author}}</small></a></td>
</tr>
{{/each}}
答案 1 :(得分:0)
这里的主要问题是您的{{#each}}
语句有点格式不正确,您应该像{em} {{p}}那样迭代controller
对象:
{{#each controller}}
<tr>
<td><a href="#">{{title}} <small class='muted'>by {{author}}</small></a></td>
</tr>
{{/each}}
这是因为Ember控制器代表他们的对象,或者在Ember.ArrayController
的情况下代理他们的数组。