@fsamorodov

Как в Emberjs запушить объект в массив без использования hasMany?

Всем привет!

У меня есть модель
var attr = DS.attr,
    hasMany = DS.hasMany;

export default DS.Model.extend({
  date: attr('string'),
  lists: hasMany('other-model')
});


Задача сохранять строку lists в обычный массив, а не через связку hasMany.

Мой контроллер:
addList: function() {
            var This = this;
            var report = this.get('model');
            report.get('lists').pushObject({
                    summ: This.get('summ'),
                    comment: This.get('comment'),
                    unit: This.get('unit')
                });

                report.save();
                This.set('summ', '');
                This.set('comment', '');
                This.set('err', '');


Но такой вариант не работает :(

В модели пробовал менять hasMany на string и ''

Еще такой вопрос, как потом удалить один из lists?
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 2
OZakharskaya
@OZakharskaya
Широкой души русский человек))
может статья здесь поможет? посмотрите...
Ответ написан
Комментировать
Astralet
@Astralet
Javascript / Ember.js / Laravel
Так по умолчанию вроде сериалайзер Ember-Data должен при сохранении hasMany-отношения как раз передавать массив id моделей.
Либо перепишите под свои требования DS.RESTSerializer ( или JSONSerializer - в зависимости чем грузите данные). В нем метод serializeHasMany. Там уже логику сохранения можно описать какую угодно.
Вот кусок из моего кода.
serializeHasMany: function(snapshot, json, relationship) {
    var key = relationship.key;
    var isPoly = relationship.options.polymorphic;
    if (key === 'attaches') {
    	var hasMany = snapshot.hasMany(key);
    	var result = [];
    	hasMany.forEach(function(item) {
    		result.push({id: item.id, type: item.modelName}); //вот здесь я формирую структуру для полиморфного отношения, для отправки на сервер
    	});
    	json[key] = result;
      return json;
    } else {
      this._super.apply(this, arguments);
    }
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы