前言:我是余烬的新手。
我在 sails 中设置了一个节点服务器.js并且我正在使用 ember 作为前端。在我的路由文件中,我有以下内容:
App.ApplicationRoute = Ember.Route.extend({
model: function(){
if(window.sessionStorage.getItem('current_user_id')){
App.CurrentUser = window.sessionStorage.getItem('current_user_id');
this.store.find('user', App.CurrentUser);
this.store.find('list', App.CurrentUser);
}
}
});
这应该是预加载属于当前用户的列表,以便在用户转到#/lists/index
时,他们的所有列表都已加载。
这是我调用#/lists/:id
时来自服务器的响应
{
"lists": [
{
"name": "popcicle",
"user_id": 1,
"createdAt": "2013-12-31T05:26:39.970Z",
"updatedAt": "2013-12-31T05:26:39.970Z",
"id": 48
},
{
"name": "happy dance",
"user_id": 1,
"createdAt": "2013-12-31T05:28:51.220Z",
"updatedAt": "2013-12-31T05:28:51.220Z",
"id": 49
},
{
"name": "something",
"user_id": 1,
"createdAt": "2013-12-31T05:34:53.616Z",
"updatedAt": "2013-12-31T05:34:53.616Z",
"id": 50
}
]
}
但是,当我在 chrome 中打开余烬检查器并转到 data -> App.List 时,它会显示 4 个项目:
Id Name
1
48 popcicle
49 happy dance
50 something
这打破了我的观点,因为名字是undefined
TL/DR 我要么需要知道为什么 ember 数据有这个空白列表以及如何摆脱它,要么需要在我的视图中进行条件迭代,以便未定义的名称不会破坏我的应用程序。
这是我的视图代码,以防有用:
<script type="text/x-handlebars" data-template-name="lists">
<div class="left-nav">
{{partial "listNav"}}
</div>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="_listNav">
<h4> Lists </h4>
<div class="column-span2 left-nav">
<ul>
{{#each list}}
<li>
{{name}}
</li>
{{/each}}
</ul>
{{#link-to "lists.new"}}Create List{{/link-to}}
</div>
</script>
我注意到的一些事情:
- 模型挂钩没有返回语句 (http://emberjs.com/guides/routing/specifying-a-routes-model/)。
- 您似乎正在尝试返回两件事,
user
和list
。(也许你需要RSVP.hash:https://github.com/emberjs/ember.js/issues/3006#issuecomment-21110139) - 调用store.find(type, id)将查找单个资源,而不是集合。
/lists/:id
响应应显示单个列表。/lists
应显示所有列表。- 您正在使用
ApplicationRouter
而不是Lists(Index)Router
,这可能是您想要的。