3

考虑这个 Ember JS 模型:

App.User = DS.Model.extend({
    firstName: DS.attr('string')
});

我能够使用它作为 XHR 请求成功地将模型保存在服务器上:

{ 
   "user": {
     "first_name":"dude"
   }
}

但由于某种原因,它在返回此 XHR 响应时给了我一个错误:

{
    "id":1,
    "user":{
        "first_name":"dude"
    },
    "createdAt":"2013-04-12T03:13:52.382Z",
    "updatedAt":"2013-04-12T03:13:52.382Z"
}

错误说:您的服务器返回了一个带有密钥 id 的哈希,但您没有它的映射

Ember 期望输出如下所示:

{ 
   "user": {
     "id":1,
     "first_name":"dude",
     "createdAt":"2013-04-12T03:13:52.382Z",
     "updatedAt":"2013-04-12T03:13:52.382Z"
   }
}

我认为问题在于请求本身,但我不确定。请注意,我使用 Sails API 作为后端。

4

2 回答 2

4

您可以使用控制器将数据格式编组为您需要的任何格式——但这提出了一个有趣的问题,即向 API 蓝图添加对不同前端约定的支持。目前,Sails.js API 蓝图支持开箱即用的 Backbone,但如果您使用 Ember,显然这对您没有多大好处 :) 我在这里创建了一个问题https://github.com/ balderdashy/sails/issues/317

这是一个 hacky 示例,说明您如何使用自定义控制器今天使用 Sails 以这种格式发送回数据:

// api/controllers/UserController.js
module.exports = {

  // Create action: (e.g. using default route, you'd POST to /user/create)
  create: function (req,res) {
    // Grab attributes from request using Ember conventions
    var newAttributes = req.param('user');

    // Create the user object in the datastore
    User.create(newAttributes, function (err, newUser) {
      // If there was an error, handle it
      if (err) return res.send(err,500);

      // Respond with the user object using Ember conventions
      res.json({
         user: newUser
      });
    });
  }
};
于 2013-04-13T16:28:25.777 回答
2

这是一个格式怪异的 JSON 响应。您有权访问服务器吗?Ember 期望响应为带有根键的哈希值

{ 
   "user": {
     "id":1,
     "first_name":"dude",
     "createdAt":"2013-04-12T03:13:52.382Z",
     "updatedAt":"2013-04-12T03:13:52.382Z"
   }
}
于 2013-04-12T05:13:45.487 回答