我尝试像这样手动添加数据模型
beforeModel: function() {
var scope =this;
Ember.$.getJSON('/restURL').then(function(response){
scope.store.pushPayload('consultation',response);
},
并且数据已成功加载,我可以在ember调试器中看到它,但是我遇到了问题 - 数据不在视图上呈现。
application.hbs中的模板:
{{#each item in model}}
{{#link-to 'consultation' item}}{{item.remoteUser.name}}{{/link-to}}
{{/each}}
注意:当我使用this.store.find('consultation');
加载数据时,它工作正常,但我有自定义网址,无法使用此结构。
答案 0 :(得分:2)
据我了解,您希望使用直接ajax调用加载咨询。你现在的方式是,在beforeModel
中检索协商,然后,由于你没有返回承诺,Ember立即继续执行model
挂钩之前 ajax调用完成。模型挂钩中的this.store.find
可能会向服务器发出另一个可能无效的请求。最简单的方法就是
model: function() {
var store = this.store;
return Ember.$.getJSON('/restURL')
.then(function(response) {
store.pushPayload('consultation', response);
return store.all('consultation');
});
}
请注意store.all
的使用,beforeModel
是商店中已存在的所有该类型对象的动态集合。
您还可以考虑将逻辑分为model
和beforeModel: function() {
return Ember.$.getJSON('/restURL')
// this binding style is a matter of personal preference :-)
.then(this.store.pushPayload.bind(this.store, 'consultation'))
},
model: function() {
return this.store.all('consultation');
}
,如下所示:
{{1}}
答案 1 :(得分:0)
您应该使用afterModel
挂钩而不是beforeModel
,因为beforeModel
不用于数据聚合。 beforeModel
在模型尝试解析之前发生,它无法访问已解析的模型,因此您无法依赖它来向模型添加额外数据。
另一方面,afterModel
hook会将解析后的模型作为第一个参数传递,因此您可以根据需要进一步修饰模型,并且可以像model
一样返回一个承诺钩。
看看这个简单的例子:http://emberjs.jsbin.com/nukebe/1