2014-08-28 3 views
6

Можно ли передавать параметры следующим образом? Мне нужно передать некоторую информацию, которая не является частью самой модели.Передача параметров для сохранения()

myModel.save({site : 23}) 
+0

Где сайт взялось? Это метаданные? Изменено ли это на контроллере? Как это не определено на модели – IgorT

+0

@IgorT, сайт представляет собой предыдущий сайт, принадлежащий модели. У меня есть и другие причины для этого, я использую java/spring backend, а параметры прохождения позволяют мне различать метод сохранения цели. – jax

+0

@IgorT У меня одинаковые потребности: некоторые контекстные параметры нужны бэкенду ... –

ответ

9

Это возможно, если вы:

  • добавить «летучий» атрибут модели,
  • определить пользовательскую модель сериалайзер, и переопределить его метод serializeIntoHash.

Например:

App.Model = DS.Model.extend({ 
    //... 
    site: DS.attr('number', { serialize: false }) 
}); 
App.ModelSerializer = DS.RESTSerializer.extend({ 

    serializeIntoHash: function(hash, type, record, options) { 
    this._super(hash, type, record, options); 

    Ember.merge(hash, { 
     'site': record.get('site') 
    }); 
    } 
}); 

Смотрите эту comment, это правильный путь для достижения этой цели.

17

You can pass options as of Ember Data 2.2. Тем не менее, вы должны помнить, чтобы передать свои параметры под свойством adapterOptions. Например,

myModel.save({ 
    adapterOptions: { 
    site: 23 
    } 
}); 

Внутри любой из DS.Store#findAll, DS.Store#findRecord, DS.Store#query, DS.Model#save и DS.Model#destroyRecord, один из параметров должны теперь иметь adapterOptions. В случае DS.Model#save, вы можете переопределить updateRecord в адаптере:

export default DS.Adapter.extend({ 
    updateRecord(store, type, snapshot) { 
    // will now have `snapshot.adapterOptions`. 
    // ... 
    } 
}); 
+0

Точно, что мне нужно. благодаря –

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