1

如果这是一个真正的新手问题,我深表歉意:我将使用 AngularJS 和 restangular 作为一个冷启动 - 我正在将一些旧的、面向后端的代码移植到这个花哨的 SPA 和 XHR 新世界中。

无论如何,这真的很简单:我想从我的 API 加载一个对象。我可以通过这种方式相当容易地做到这一点:

App.factory('User', function($cookies, Restangular) {
  if (!$cookies.user_id) {
    return {name: 'Nobody', userId: -1};
  } else {
    return Restangular.one('users', $cookies.user_id).get();
  }
});

App.controller('ApplicationCtrl', function ($scope, User) {
  $scope.user = User;
});

这将(据我了解)让我在需要的地方注入当前用户(如果 cookie 不正确,他们最终会在 API 调用上获得 404 或 401,具体取决于。

我现在遇到的一个简单问题是,当我想在我的模板中访问这个用户对象时,它没有绑定到 {{user}},而是绑定到 {{user.user}},因为我注入了 $scope.user我的用户对象,它是一个 JSON 创建的对象,它是restangular 获取的({"user":{"id":2,"name":"Eric Eslinger","email":"eric.eslinger@gmail.com"}}如果我想说“你好用户名”,我必须说“你好,{{user.user.name}}”。这是不令人满意的.

欢迎任何关于我在设置对象层次结构时缺少什么的建议;我有一种感觉,我只是错过了一些简单但也很重要的事情,我以后需要担心这些事情。

4

1 回答 1

2

为了回答我自己的问题,这并不是一个真正的有角的东西,它是一个一般的有角的东西(ngResource 的行为方式相同)并且对于 EmberJS 的工作方式有点正交。在 EmberJS(或者至少是我使用的 Ember-Data 版本)中,JSON api 响应应该有一个根元素,Ember-Data 有点忽视(或用于键入结果对象)。$resource 和 restangular 关注根元素。因此,您可以将 api 更改为仅返回{"id:2" ...而不是返回,{"user":{"id":2 ...或者您可以对结果执行 transformResponse。你的来电。

由于我正在编写 API 和前端,而且现在没有其他人使用这个 API(一旦它稳定下来,就会改变),我只是去改变了 API 输出 JSON 的方式。后端使用 active_model_serializers,所以我现在只, root: false在几个选择位置放置一个。很容易。

于 2013-09-18T23:02:41.923 回答