获取JSON数据但它没有加载到Ember.js中的视图中

时间:2013-07-24 10:11:12

标签: codeigniter rest ember.js codeigniter-restserver

我按照控制台获取JSON,但我一直收到此错误,

Assertion failed: Your server returned a hash with the key 0 but you have no mapping for it 

和这个错误,

TypeError {} "Cannot call method 'toString' of undefined" 

这是一个示例JSON响应,

[{"id":"1","last_name":"Solow","first_name":"Jeanne","suffix":null,"expiration":"2013-11-15","email":"jeanne_s@earth.com","street":"16 Ludden Dr.","city":"Austin","state":"TX","zip":"33347","phone":"964-665-8735","interests":"Great Depression,Spanish-American War,Westward movement,Civil Rights,Sports"}, {etc..}

这是我的app.js,

App = Ember.Application.create({});

App.Store = DS.Store.extend({
    revision : 12,
    adapter : DS.RESTAdapter.extend({
        url : 'http://ankur1.local/index.php/api/example/users/format/json',
        dataType : 'jsonp',
    })
});

App.IndexRoute = Ember.Route.extend({
    renderTemplate : function() {
        this.render('myTemplate', {
            controller : 'Index'
        });
    },
    model : function() {
        return App.myTemplate.find();
    }
});

App.IndexController = Ember.Controller.extend({
    user : Ember.Object.create({
        name : ""
    }),
    userNameBinding : Ember.Binding.oneWay("this.user.name"),
    clickButton : function(name) {

        if ($("#name").val().trim().length === 0) {
            alert("text box is empty");
        } else {

        }
    }
});

App.myTemplate = DS.Model.extend({
    id : DS.attr('int'),
    last_name : DS.attr('string'),
    first_name : DS.attr('string'),
    suffix : DS.attr('string'),
    expiration : DS.attr('date')
});

需要注意的一点是我在后端使用Phil Sturgeon的Codeigniter RestServer Library。我的代码可能有什么问题,或者它可能是后端的问题?

1 个答案:

答案 0 :(得分:1)

Ember数据要求json响应采用某种格式。基本密钥需要是模型的名称。在您的情况下,没有基本密钥。

示例:您返回以下内容

[{"id":"1",
  "last_name":"Solow",
  "first_name":"Jeanne",
  "suffix":null,
  "expiration":"2013-11-15",
  "email":"jeanne_s@earth.com",
  "street":"16 Ludden Dr."}, {etc}]

但是ember需要这样的东西:

{'users': [{"id":"1",
  "last_name":"Solow",
  "first_name":"Jeanne",
  "suffix":null,
  "expiration":"2013-11-15",
  "email":"jeanne_s@earth.com",
  "street":"16 Ludden Dr."}, {etc}]}

您需要更改服务器的json响应,或者使用另一个库作为服务器的接口。