0

そのため、Ember Data を使用して API エンドポイントからのデータを使用して、Ember アプリケーションでルートを動的に構築しようとしています/categories。これを行うために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 に答える