概要
私は Ember-Model を使用していますが、このエラー メッセージのデバッグに助けが必要です。実際には 2 つの別個の (ただし類似した) エラー メッセージです。
TypeError: Cannot read property 'map' of undefined
-と-
Uncaught Error: Assertion Failed: TypeError: Cannot read property 'map' of undefined
詳細
私のアプリには、「view」というルートがあります。API からアカウントのコレクションを取得します。
モデルとカスタム アダプターがほぼ正しく定義されており、サーバーから JSON ペイロードを含む正常な応答が返されます。コンソールにエラーがあるため、次に何をすべきかわかりません (上記を参照)。
Ember-Model ソース コードのどこかにmap
、関数内で呼び出されるプロパティがあり、materializeData
それが何をしようとしているのかわかりません... (その関数// FIXME
にコメントがあり、緊張しています)
問題を引き起こしたコードは次のとおりです。
モデルを見る:
import ViewAdapter from '../../adapters/accounts/view';
var attr = Ember.attr, hasMany = Ember.hasMany, belongsTo = Ember.belongsTo;
var View = Ember.Model.extend({
debtor_id: attr(),
debtor_legacy_account_number: attr(),
debtor_full_name: attr(),
debtor_balance: attr()
});
View.adapter = ViewAdapter.create();
View.url = 'api/rest/debtor/list';
View.rootKey = 'data';
View.collectionKey = 'debtors';
View.primaryKey = 'debtor_id';
export default View;
ビュー アダプター:
var ViewAdapter = Ember.RESTAdapter.extend({
buildURL: function(klass, id) {
var urlRoot = Ember.get(klass, 'url');
if (!urlRoot) { throw new Error('ViewAdapter requires a `url` property to be specified'); }
if (!Ember.isEmpty(id)) {
return urlRoot + "/" + id;
} else {
return urlRoot;
}
},
ajaxSettings: function(url, method) {
return {
url: url,
type: method,
headers: {
"Accept": "application/json; version=1.0.0"
},
dataType: "json"
};
}
});
export default ViewAdapter;
ルートを見る:
import View from '../../models/accounts/view';
export default Ember.Route.extend({
model: function() {
return View.find({page_size: 10, page_number: 1});
}
});
注: ここでモデル フックを使用してサーバーにパラメーターを渡すのは一時的なものです。別のケースでサーバー側のページネーションを行うためのより良い方法を探しています...しかし、これは少なくとも今のところ機能します...
私は何が欠けていますか?
完全なスタック トレース
TypeError: Cannot read property 'map' of undefined
at Ember.RecordArray.Ember.ArrayProxy.extend.materializeData (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:60646:24)
at Ember.RecordArray.Ember.ArrayProxy.extend.load (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:60630:31)
at Ember.RESTAdapter.Ember.Adapter.extend.didFindQuery (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:61925:15)
at http://local-03-02-xx.lariatcentral.net/assets/vendor.js:61916:12
at invokeCallback (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:23709:19)
at publish (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:23379:9)
at publishFulfillment (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:23799:7)
at http://local-03-02-xx.lariatcentral.net/assets/vendor.js:29217:9
at DeferredActionQueues.invoke (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:21747:18)
at Object.DeferredActionQueues.flush (http://local-03-02-xx.lariatcentral.net/assets/vendor.js:21797:15) vendor.js:17062
logToConsole vendor.js:17062
RSVP.onerrorDefault vendor.js:59834
__exports__.default.trigger vendor.js:22673
Promise._onerror vendor.js:23397
publishRejection vendor.js:23804
(anonymous function) vendor.js:29217
DeferredActionQueues.invoke vendor.js:21747
DeferredActionQueues.flush vendor.js:21797
Backburner.end vendor.js:21260
Backburner.run vendor.js:21315
apply vendor.js:21145
run vendor.js:19777
settings.success vendor.js:62014
fire vendor.js:3214
self.fireWith vendor.js:3326
done vendor.js:9370
callback
JSON ペイロードのサンプル
{
"status":"success",
"data":{
"debtors":[
{
"debtor_id":1048,
// ...
// ...
},
{
"debtor_id":1049,
// ...
// ...
},
{
"debtor_id":1050,
// ...
// ...
},
// ...more JSON...
],
"count":10,
"total":475,
"current_page":1,
"total_pages":48,
"page_size":10
}
}
私の問題とまったく同じように見えるこのgithubの問題も見つかりました。