2016-04-08 2 views
0

Другие вопросы по этой теме: over 3 years old.Подложные данные для данных Ember

Я вижу это documentation on serializers, который кажется ответом, но я не могу заставить его работать. Мне просто нужна простая структура объектов JSON:

business-hours : { 
    monday: { 
     open: “24hr”, 
     from: <some time>, 
     to: <some time> 
    }, 
    tuesday: { 
     open: “closed”, 
     from: <some time>, 
     to: <some time> 
    } 
}, 

Что здесь происходит?

Редактировать: как для редактирования ключей в пустом поле DS.attr(), в ответ на запрос блокировок для получения дополнительной информации. Я передаю этот компонент модели:

<h3>Business Hours</h3> 
{{business-hours model=model}} 

И попытаться изменить атрибут model.businessHours для того, чтобы создать эту идеальную запись, описанной выше:

{{input type="time" value=model.businessHours.friday.from}} 
{{input type="time" value=model.businessHours.friday.to}} 

Если этот тип синтаксиса позволяет мне быть, чтобы сформировать соответствующий «поддокумент» в модели? С пустым полем DS.attr()?

+0

DS.attr() сохранит любые данные под ключом, этого недостаточно? – locks

+0

Итак, прежде чем сохранить запись, я должен просто установить model.businessHours, равный объекту, созданному на маршруте и измененному с помощью входов? Поскольку это не похоже на то, что вы можете установить businessHours.monday.open непосредственно из входного значения, если оно определено только с пустым DS.attr() –

+0

Вы должны уметь. Можете ли вы отредактировать сообщение и добавить этот код? – locks

ответ

1

Если вы хотите отредактировать эти поддокументы, вы должны использовать модель для этого.

Так что для этого у вас есть две модели:

/models/business-hour-week.js импорта DS от 'Ember-данных';

export default DS.Model.extend({ 
    monday: DS.hasMany('business-hour-day'), 
    tuesday: DS.hasMany('business-hour-day') 
}); 

/модель/бизнес-часовой день импорт DS от 'Ember-данных';

export default DS.Model.extend({ 
    open: DS.attr('string'), 
    from: DS.attr('date'), 
    to: DS.attr('date') 
}); 

И затем использовать сериалайзер для преобразования данных в действительный JSONAPI документа, как это:

{ 
    data: { 
     type: 'business-hour-week', 
     id: '1', 
     relationshops: { 
      monday: { 
       data: { 
        id: '1', 
        open: '24hr', 
        from: '<some time>', 
        to: '<some time>', 
       } 
      }, 
      toesday: { 
       data: { 
        id: '1', 
        open: 'closed', 
        from: '<some time>', 
        to: '<some time>', 
       } 
      } 
     } 
    } 
} 

Затем вы можете использовать это, и работать с ним, как и ожидалось.

0

Ничего из вышеперечисленного не работало для меня. Использование сериализатора для добавления идентификаторов кажется хакерами. Это одна из тех вещей, которые должны быть легкими ... Это мои два решения проблемы.

  1. Это самый простой. Вы можете использовать аддон, называемый обломками ember: https://github.com/lytics/ember-data-model-fragments. Это позволяет создавать вложенные модели, не заставляя дочерние записи иметь идентификатор. Модели фрагментов настроены так же, как и обычные, и имеют чистые/грязные attrs.

  2. Вы можете настроить 2 модели, как описано выше (неделя/дни), но вы должны использовать атрибут belongsTo вместо hasMany (одиночная запись или массив записей). Вам также понадобилось бы создавать сериализаторы для каждого родительскую модель (неделя и любой родительский элемент) и использовать встроенные записи mixin, устанавливая отношение attrs к «deserialize: records, serialize: records». Вам просто нужно убедиться, что каждый ответ модели с сервера имеет свой собственный идентификатор в иерархии. Если вы используете Mongo/Mongoose, вы можете создать субдоку, вложенные дочерние схемы, используя синтаксис литерала объекта. Таким образом, каждый субдоктор получает свой собственный идентификатор, даже если это взаимно-однозначное отношение.

+0

Проверьте этот [URL] (http://stackoverflow.com/help), что будет полезно для повышения качества вашего контента –

Смежные вопросы