因为我试图从ajax调用中显示一些数据,所以我得到了他的错误:
Uncaught TypeError: Object #<Object> has no method 'addArrayObserver'
该应用程序非常简单,但我想在进入特定页面时向我的服务器发送ajax请求。所以我可以直接从服务器加载数据..
这是我的代码:
App.Enquiries = Ember.Object.extend({
});
App.EnquiriesRoute = Ember.Route.extend({
model: function() {
return App.Enquiries.findAll();
}
});
App.Enquiries.reopenClass({
findAll: function() {
var result = Ember.ArrayProxy.create({content: []});
$.ajax({
url: host + 'mdf/enquiry',
type: 'GET',
accepts: 'application/json',
success: function(data) {
result.set('content', data);
console.log('DEBUG: GET Enquiries OK');
},
error: function() {
console.log('DEBUG: GET Enquiries Failed');
}
});
return result;
}
});
对于模板:
<ul>
{{#each item in content}}
<li>{{item.id}}</li>
{{/each}}
</ul>
到目前为止,我不确定是否使用Ember.ArrayProxy是一个好主意,但在阅读了我认为可行的文档后,但没有...
我试着在网上看,但似乎我可能是唯一一个遇到这个问题的人?
答案 0 :(得分:4)
错误消息基本上说,Ember期望一个数组,但没有数组。我认为这是因为您将AJAX响应直接设置为ArrayProxy的内容属性。但是你的响应对象不是数组(你的评论至少表明了这一点。)
我会推荐以下内容。有关如何在没有Ember数据的情况下使用Ember的更多详细信息,请查看此question。
App.Enquiry = Ember.Object.extend({ // rather one Object for each Enquiry
});
App.EnquiriesRoute = Ember.Route.extend({
model: function() {
return App.Enquiries.findAll();
}
});
App.Enquiries.reopenClass({
findAll: function() {
var result = [];
$.ajax({
url: host + 'mdf/enquiry',
type: 'GET',
accepts: 'application/json',
success: function(data) {
data.enquiries.forEach(function(enquiry){
// we are iterating the enquiries in the response step by step and create corresponding objects
var model = App.Enquiry.create(enquiry);
result.addObject(model); //fill your array step by step
});
console.log('DEBUG: GET Enquiries OK');
},
error: function() {
console.log('DEBUG: GET Enquiries Failed');
}
});
return result;
}
});