1

アダプター「findQuery」に関数があり、関数はサーバーからデータを取得して返す必要があります。

関数:

findQuery: function(store, type, query) {
  var userId = query['user_id'];
  delete query['user_id'];

  if (this.sortQueryParams) {
    query = this.sortQueryParams(query);
  }

  var adapter = this;
  // Create nested url
  //return this.ajax(this.urlPrefix(this.pathForType(type.typeKey), this.buildURL(type, userId)), 'GET', { data: query });
  // We would like to relate the rows to the connected user
  return new Ember.RSVP.Promise(function(resolve, reject) {
    adapter.ajax(adapter.buildURL(type.typeKey, null, userId), 'GET', { data: query }).then(function(devices) {
      store.find('user', userId).then(function(user) {
        devices.setEach('user_id', user);
        resolve(devices);  // devices is set exactly as i wanted!
      }, function(failed) {
        reject(failed);
      });

    }, function(error) {
      reject(error);
    });
  });
}

したがって、関数をデバッグすると、関数が正しいデータで解決されることがわかります (API は、要求されたすべてのデータをオブジェクトの配列として返しました)。そして、ログエラーが発生します:

エラー: アサーションに失敗しました: findQuery からの応答は未定義ではなく、配列でなければなりません

アップデート

問題は解決しましたが、なぜ発生するのかまだわかりません。

何が起きましたか?

store-injector ファイルに設定しました

 inflector.irregular('general_device', 'devices');

それは私のためにそのように見えるAPIエンドポイントを解決します:

https://api.url.net/account/85/devices

何らかの競合がありますが、私が試みたのは、次のような上記の関数で URL を解決することです。

https://api.url.net/account/85/users/135/devices

それは解決しましたが、それが起こった理由を参照できません。それは理にかなっていますが、誰かがそれが起こった理由を説明できることを願っています.

4

1 に答える 1

0

PromiseArray を返す必要があります。

使用方法の例については、ドキュメントを参照してください。

あなたの例では、次のように変更されます。

findQuery: function(store, type, query) {
  var userId = query['user_id'];
  delete query['user_id'];

  if (this.sortQueryParams) {
    query = this.sortQueryParams(query);
  }

  var adapter = this;
  // Create nested url
  //return this.ajax(this.urlPrefix(this.pathForType(type.typeKey), this.buildURL(type, userId)), 'GET', { data: query });
  // We would like to relate the rows to the connected user

  var promise = new Ember.RSVP.Promise(function(resolve, reject) {

    adapter.ajax(adapter.buildURL(type.typeKey, null, userId), 'GET', { data: query }).then(function(devices) {
      store.find('user', userId).then(function(user) {
        devices.setEach('user_id', user);
        resolve(devices);  // devices is set exactly as i wanted!
      }, function(failed) { reject(failed); });

    }, function(error) { reject(error); });

  });

  return DS.PromiseArray.create({
    promise: promise
  });
}
于 2015-06-09T13:22:27.630 に答える