前言:我是 ember 的新手。
我在 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 中打开 ember 检查器并转到数据 -> App.List 时,它显示了 4 个项目:
Id Name
1
48 popcicle
49 happy dance
50 something
这打破了我的观点,因为名称是 undefined
TL/DR 我需要知道为什么 ember 数据有这个空白列表以及如何摆脱它,或者如何在我的 View 中进行条件迭代以使未定义的名称不存在'不要破坏我的应用程序。
这是我的 View 代码以防有帮助:
<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>
最佳答案
我注意到的一些事情:
- 您的模型 Hook 没有返回语句 (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
,这可能正是您想要的。
关于javascript - 使用 ember 数据和 sails.js 时获取空记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960133/