Я добавляю объекты к свойству массива модели, а затем сохраняю его. Когда я смотрю на исходящий запрос, рассматриваемое свойство всегда является пустым массивом.Сериализация массива Ember
Мой заказ сериализатору (расширение Ember.RESTSerializer) имеет следующее:
DS.ArrayTransform = DS.Transform.extend(
{
deserialize: function(serialized)
{
return (Ember.typeOf(serialized) == "array") ? serialized : [];
},
serialize: function(deserialized)
{
var type = Ember.typeOf(deserialized);
if (type == 'array')
{
return [{foo:'bar'}];
// return deserialized;
}
else if (type == 'string')
{
return deserialized.split(',').map(function(item)
{
return item.trim();
});
}
else
{
return [];
}
}
});
App.register("transform:array", DS.ArrayTransform);
Как вы можете видеть, я попытался, передавая обратно произвольный массив с объектом в нем, но даже тогда массив всегда выходит как пустой. В приложении я создаю запись так:
var post = this.store.createRecord('explorePost', {
title: content.get('title'),
text: content.get('text'),
postDate: content.get('postdate'),
publishDate: content.get('publishDate'),
published: content.get('published'),
postType: content.get('postType'),
link: content.get('link,'),
projectDownloads: [],
// projectDownloads: this.model.get('projectDownloads'),
projectLinks: content.get('projectLinks'),
});
затем добавить объекты, как это:
this.model.get('projectDownloads').forEach(function (_download) {
console.log('pushing download', _download);
post.get('projectDownloads').pushObject(_download);
});
Я могу подтвердить, что в момент сохранения, пост объект имеет массив projectDownloads с одного объекта в этом. Независимо от того, что я делаю, я не могу заставить его выплюнуть содержимое, когда оно сэкономит. Он определенно входит в пользовательский сериализатор и обнаруживает его как массив, но вы можете видеть, что что-то еще, кажется, переопределяет его.
Может ли кто-нибудь сказать мне, что я делаю неправильно? Моя установка модели ниже:
App.ExplorePost = DS.Model.extend(
{
title: DS.attr('string'),
text: DS.attr('string'),
link: DS.attr('string'),
postDate: DS.attr('momentdate'),
publishDate: DS.attr('momentdate'),
user: DS.belongsTo('user',{async:true}),
postType: DS.attr('string'),
activity: DS.belongsTo('activity',{ inverse: 'explorePost', async:true}),
comments: DS.hasMany('comment',{ inverse: 'explorePost', async: true }),
// projectDownloads: DS.hasMany('projectDownload',{ inverse: 'explorePost'}),
projectDownloads: DS.attr('array'),
// projectLinks: DS.hasMany('projectLink',{ inverse: 'explorePost'}),
projectLinks: DS.attr('string'),
published: DS.attr('boolean', {defaultValue: true}),
// tags: DS.hasMany('tag')
sortdate: function()
{
var datestr = Ember.isEmpty(this.get('postDate')) ? '' : moment(this.get('postDate')).format('YYYYMMDDHHmm');
var fn = (datestr + '____________').slice(0, 12);
return fn;
}.property('postDate')
});
На самом деле это унаследованное приложение, оно использует более старую версию данных ember и пытается ее обновить. Когда я использовал правильные отношения и встроенные записи, у меня были всевозможные проблемы, когда он пытался перезагрузить данные с сервера (не могу установить свойство readonly для «id») и т. Д. И т. Д. Короткий вариант - мне нужно заставить его отправить исходный текст json для этого массива. –
Я не понимаю, почему, даже если я передаю произвольные данные методу сериализации, он не использует его. Что мне не хватает по этому поводу? –
@TobyTremayne Вы проверили, вызывается ли 'serialize'? Является ли атрибут вообще не сериализованным или просто пустым '[]'? Вы отказались от того, что этот атрибут сериализуется в сериализаторе модели? Кажется, что это нормально для других людей: http://stackoverflow.com/a/19557708/29347 –