我似乎无法追查此错误的来源:
断言失败:未找到“0”的模型
服务器正在获取JSON,但应用程序在发送到模板之前发生错误。问题似乎发生在REST适配器和路由器之间。当我使用夹具适配器时,模板呈现无错误。
我正在使用Ember和Handlebars版本1.0.0。
这是我的应用代码:
window.App = Ember.Application.create();
App.ApplicationAdapter = DS.RESTAdapter.extend({
host: 'http://localhost:3000'
});
App.Router.map(function() {
this.resource("stories", { path: "/" }, function() {
this.resource("boards", { path: "/boards"} )
});
});
App.StoriesRoute = Ember.Route.extend({
model: function() {
return this.store.findAll('story');
}
});
attr = DS.attr;
App.Story = DS.Model.extend({
color: attr()
});
把手模板
<script type="text/x-handlebars">
{{ outlet }}
</script>
<script type="text/x-handlebars" data-template-name="stories">
<ul>
<li class="storyLine">
<ul>
<li id="colorSwatch"></li>
<li class="board">+</li>
</ul>
</li>
</ul>
<ul>
{{#each model}}
<li class="storyLine">
<ul>
<li id="colorSwatch" {{bindAttr class=story.color}}></li>
<li class="board">dddd</li>
</ul>
</li>
{{/each}}
</ul>
</script>
感谢您的帮助!
答案 0 :(得分:25)
服务器的响应可能没有正确格式化。 JSON需要具有与模型同名的根。请参阅:http://emberjs.com/guides/models/the-rest-adapter/#toc_json-root 您的回复需要看起来像这样:
{
"story": [
{
"id": 0,
"title": "foo"
},
{
"id": 1,
"title": "bar"
}
]
}
答案 1 :(得分:0)
在您使用对象bindAttr
的{{1}}中,您应该更改story
帮助程序以引用该对象:
{{#each}}
希望它有所帮助。
答案 2 :(得分:0)
从扩展FixtureAdapter
转换为扩展RESTAdapter
时,我遇到了类似的错误。我覆盖了finder
- 方法之一。
虽然FixtureAdapter
对一组对象完全满意
findQuery: function(store, type, query, array) {
return DS.PromiseArray.create({
promise: new Promise(function(resolve, reject){
var results = [];
store.findAll('source').then(function(sources) {
sources.forEach(
function (rootSource) {
results.push( store.createRecord( ... ));
}
);
resolve(results);
},reject);
})
});
}
对于相同的方法,RESTAdapter
期望具有键和数组的对象为值
findQuery: function(store, type, query, array) {
return new Ember.RSVP.Promise(function(resolve, reject){
var results = [];
store.find('source').then(function(sources) {
sources.forEach(
function (rootSource) {
results.push({ ... });
}
);
resolve({"connections":results});
},reject);
});
},
查看resolve
调用内的差异。
即使它像在FixtureAdapter
中那样将对象放入数组中,也会导致错误
稍后当您尝试更改对象属性时Assertion failed: You must use Ember.set() to access this property
。
对于所有这些,我使用的是Ember 1.2.0,Ember Data:1.0.0-beta.7 + canary.b45e23ba。
希望这会有所帮助......