2016-06-08 4 views
0

Я пытаюсь загрузить данные с RESTAPISerializer, но, похоже, есть некоторые проблемы.Ember - Данные о загрузке в RESTAPISerializer

Целью является хранить статьи с тегами. Статьи появляются в магазине просто прекрасно, и я могу посмотреть на них с инспектором Эмбера. Но я не могу понять, как хранить теги, они никогда не появляются в инспекторе.

Я создал модель, называемую блога-тегом для хранения тегов. Они приходят в определенном формате, который я не могу изменить, и это выглядит следующим образом:

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); 
    }, 
}); 

ответ

0

решаемые мою собственную проблему. Отвечая на вопрос, чтобы кто-то другой столкнулся с одной проблемой.

Что я пытался сделать, это вставить теги из сериализатора статей. Это означает, что мне нужно было использовать EmbeddedRecordsMixin.

http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html

Это было на самом деле довольно просто сделать это. Сделал следующие изменения в сериализаторе, описанном выше, код работал как есть с этими дополнениями.

// app/serializers/articles.js 
import RESTSerializer from 'ember-data/serializers/rest'; 
import EmbeddedRecordsMixin from 'ember-data/serializers/embedded-records-mixin'; 
export default RESTSerializer.extend(EmbeddedRecordsMixin, { 

    attrs: { 
    blogTags: { embedded: 'always' } 
    } 

}); 
Смежные вопросы