【发布时间】:2016-06-08 23:12:46
【问题描述】:
我正在尝试使用 RESTAPISerializer 侧载数据,但似乎存在一些问题。
目标是存储带有标签的文章。文章在商店里出现得很好,我可以用 Ember 检查器查看它们。但我似乎无法弄清楚如何存储标签,它们从未出现在检查器中。
我创建了一个名为 blog-tag 的模型来存储标签。它们采用特定格式,我无法更改,它看起来像这样:
tid:term
...我在每篇文章中都得到了它们的数组。
文章模型包含与博客标签的 hasMany 关系。我正在尝试通过序列化程序将它们传递进来,并且一直在使用各种格式(JSON、javascript 数组等)。我也为博客标签编写了一个自定义序列化程序,但它似乎没有多大作用。
有人可以解释我缺少什么吗?
文章模型:
import DS from 'ember-data';
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
export default Model.extend({
title: attr(),
blogTags: hasMany('blog-tag', { async: true })
});
博客标签模型:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
export default Model.extend({
tid: attr('number'),
term: attr('string'),
});
文章序列化器:
import RESTAPISerializer from 'ember-data/serializers/rest';
export default RESTAPISerializer.extend({
normalizeResponse: function(store, primaryModelClass, payload, id, requestType) {
var normalizedPayload = {articles: []};
payload.forEach(function(item) {
var tags = item.tags.split("|"), blogTags = [];
// storing blog tags in an array, have also done it as a
// JSON structure
var blogTags = tags.map((tag) => {
var item = tag.split(":"),
vals = {};
vals.tid = item[0];
vals.term = item[1];
return vals;
});
var article = {
id: item.nid,
title: item.title,
blogTags: blogTags,
};
normalizedPayload.articles.push(article);
});
return this._super(store, primaryModelClass, normalizedPayload, id, requestType);
},
});
【问题讨论】:
标签: rest ember.js serialization