2013-12-19 2 views
0

У меня есть объект «Резиденция», а в резиденции много деталей. Когда данные возвращаются с сервера, как использовать сериализатор «extractSingle» для сопоставления его отношений? У меня есть следующее, и я получаю сообщение об ошибке «Невозможно получить свойство« toString »неопределенной или нулевой ссылки». Может ли кто-нибудь сказать мне, что я делаю неправильно здесь?ember data extract single serializer

App.Residence = DS.Model.extend({ 
residence_ID: attr('number'), 
house_Number: attr('string'), 
street: attr('string'), 
city_ID: attr('number'), 
state_ID: attr('number'), 
zip: attr('string'), 
apt: attr('string'), 
client_ID: attr('number'), 
client: null, 
lead: null, 
projectDetails: DS.hasMany('projectDetail') 
}); 


App.ResidenceSerializer = DS.WebAPISerializer.extend({ 
primaryKey: 'residence_ID', 

extractSingle: function (store, primaryType, payload) { 
    var primaryTypeName = primaryType.typeKey; 

    var typeName = primaryTypeName, 
     type = store.modelFor(typeName); 

    var data = {}; 
    data[typeName] = payload; 
    data.projectDetails = []; 

    var normalizedArray = payload.projectDetails.map(function (nav) { 
     data.projectDetails.push(nav); 
    }, this); 
    payload.projectDetails = payload.projectDetails.mapProperty('projectDetailID'); 

    payload = data; 
    return this._super.apply(this, arguments); 
}, 

normalizeHash: { 
    projectDetails: function (hash) { 
     hash.residence_ID = hash.id; 
     hash.id = hash.projectDetailID; 
     return hash; 
    }, 
    residence: function (hash) { 
     hash.residence_ID = hash.id; 
     return hash; 
    } 
} 

}); 

и вот JSON вернулся с сервера

{ 
    "residence_ID":3532, 
    "house_Number":"243", 
    "street":"Main St.", 
    "city_ID":2, 
    "state_ID":33, 
    "zip":"11111", 
    "apt":"35", 
    "client_ID":3598, 
    "projectDetails":[{"projectDetailID":4947,"residence_ID":3532"}, {"projectDetailID":4947,"residence_ID":3532}] 
    } 
+0

Можете ли вы показать, как ваш JSON идет вниз? – Kingpin2k

+0

Я только что написал json. Не знаю, почему я не могу поместить его в раздел кода. –

ответ

1
return this._super.apply(this, arguments); 

ваш выбрасывая все ваши работы в конце и возвращение супер реализации. Вы могли бы просто return data;.

В качестве примечания ссылка в arguments не обновляется при установке payload = data;

+0

Я сделал то, что вы предлагали, но все равно получал ту же ошибку. Я ввел код и поместил его в отдельный файл DS.WebAPISerializer = DS.RESTSerializer.extend, и это не дает мне ошибку и возвращает правильное количество записей. Я действительно не понимаю, почему этот файл был создан шаблоном ember и является общим для всех точных одиночных моделей, для тестирования я добавил код, чтобы сделать детей для этой конкретной модели. Я, однако, не могу получить значение, сделав get.() –