Ember显示来自ajax调用的数据

时间:2014-02-05 15:54:02

标签: javascript ajax ember.js

因为我试图从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是一个好主意,但在阅读了我认为可行的文档后,但没有...

我试着在网上看,但似乎我可能是唯一一个遇到这个问题的人?

1 个答案:

答案 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;
   }
});