0

所以,我试图在我的 Ember 应用程序中使用来自 API 端点的数据动态构建路由/categories,使用 Ember 数据。为了做到这一点,我在didLoad我的模型中添加了一个方法,该方法由控制器调用并设置为该控制器的属性。我将路由映射到我的路由器,一切正常。当我尝试使用由 findQuery 检索的服务器中的数据设置的内容属性设置控制器时,真正的麻烦就开始了。

这是错误:

TypeError {} "Object /categories/548/feeds has no method 'eachRelationship'"

这是代码:

window.categoryRoutes = [];

App.Categories = DS.Model.extend({
  CATEGORYAFFINITY: DS.attr('boolean'),
  CATEGORYID: DS.attr('number'),
  CATEGORYNAME: DS.attr('string'),
  CATEGORYLINK: function () {
    var safeUrl = urlsafe(this.get('CATEGORYNAME'));
    categoryRoutes.push(safeUrl);
    return safeUrl;
  }.property('CATEGORYNAME'),
  didLoad: function () {
    var categoryLink = this.get('CATEGORYLINK');
    var categoryId = this.get('CATEGORYID');

    App.Router.map(function () {
      this.resource(categoryLink, function () {
        // some routes
      });
    });

    App[Ember.String.classify(categoryLink) + 'Route'] = Ember.Route.extend({
      setupController: function(controller, model) {
        // source of error
        this.controllerFor(categoryLink).set(
          'content',
          this.store.findQuery('/categories/' + categoryId + '/feeds', {
            appid: 'abc123def456',
            lat: 39.75,
            long: -105
          })
        );
      }
    });
  }
});

任何“暂停”都会受到赞赏!

另外,如果我这样做完全错误,并且有一种更像 Ember 的方式来做到这一点,我想知道。

4

1 回答 1

0

我想通了。我收到此错误是因为我将字符串而不是真正的“类型”从 App.Helpers 对象传递到我已覆盖的某些自定义 RESTAdapter 代码中的提取方法。

解决方案是使用我的自定义类型名称在 App.Helpers 中传入相应的模型助手。

在被覆盖的RESTAdapter.serializer.extractMany方法中是这样的:

var reference = this.extractRecordRepresentation(loader, App.Helpers[root], objects[i]);
于 2013-08-23T08:01:05.833 回答