我将对象添加到模型的数组属性中,然后保存它。当我查看传出请求时,有问题的属性始终是一个空数组。
我的自定义序列化程序(扩展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);
});
我可以确认,在保存时,post对象有一个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')
});
答案 0 :(得分:1)
没有内置DS.attr('array')
,一个天真的实现可能不知道如何序列化内部发现的ember-data对象。你打算把它留在那里吗?如果您将其交换回您已注释掉的关系并更改projectDownloads
以使用该承诺:
this.model.get('projectDownloads').then(function(downloads) {
downloads.forEach(function(_download){
post.get('projectDownloads').pushObject(_download);
});
});
这应该可以正常工作。前几天我把几乎相同的东西放在一起。 http://emberjs.jsbin.com/zolani/3/edit?html,css,js,output
答案 1 :(得分:0)
如果你的数组不包含复杂的对象,比如字符串数组,你可以使用DS.attr(),它会起作用。