我正在使用EmberJS 1.0.0和Ember Data 1.0.0 beta以及LocalStorage Adapter的最新版本。当我尝试从商店加载具有hasMany关系的记录时,我得到以下错误:
ember-1.0.0.js(第394行)
断言失败:你查找了“项目”关系 'App.List:ember236:1',但有些相关记录不是 加载。要么确保它们都与父母一起加载 记录,或指定关系是异步的(DS.attr({async: 是}))
和ember-data.js(第2530行)
TypeError:解析器未定义 然后(resolver.resolve,resolver.reject);
快速演示应用:http://jsbin.com/oKuPev/49(观看控制台)
<script type="text/x-handlebars">
List: {{name}}
<div>
{{#each items}}
{{id}} - {{name}}<br/>
{{/each}}
</div>
</script>
<script type="text/javascript">
window.App = Ember.Application.create({});
App.ApplicationAdapter = DS.LSAdapter.extend({});
var FIXTURES = {
'App.List': {
records: {
'1': { id: '1', name: 'The List', items: ['1','2'] }
}
},
'App.Item': {
records: {
'1': { id: '1', name: 'item 1', list: '1' },
'2': { id: '2', name: 'item 2', list: '1' }
}
}
}
// Store fixtures in localStorage
localStorage.setItem('DS.LSAdapter', JSON.stringify(FIXTURES));
// Models
App.List = DS.Model.extend({
name: DS.attr('string'),
items: DS.hasMany('item')
});
App.Item = DS.Model.extend({
name: DS.attr('string') ,
list: DS.belongsTo('list')
});
// Route
App.ApplicationRoute = Ember.Route.extend({
model: function() {
// Fails!!!
return this.store.find('list', 1);
}
});
</script>
我不确定问题是ember.js,ember-data.js还是LocalStorage适配器。
答案 0 :(得分:16)
您需要将模型上的“项目”定义为async,因为ember会对这些模型单独发出请求,然后将它们异步连接在一起。
App.List = DS.Model.extend({
name: DS.attr('string'),
items: DS.hasMany('item',{async:true})
});
答案 1 :(得分:3)
如果将items
定义为异步关系,则此方法有效。
item: DS.hasMany('item',{async:true})
这是一个有效的jsbin:http://jsbin.com/oKuPev/53/edit
答案 2 :(得分:0)
其他任何偶然发现此线程b / c关联的人都没有加载(但没有错误)请注意将父级与子记录关联的items: [1, 2]
。