2014-08-28 66 views
6

是否有可能传递这样的参数?我需要传递一些不属于模型本身的信息。传递参数来保存()

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

网站从哪里来?它是元数据吗?它是否在控制器上编辑?如何在模型上未定义 – IgorT 2014-08-28 13:56:27

+0

@IgorT该网站代表属于该模型的上一个网站。我还有其他原因,我使用java/spring后端,并通过params让我区分目标保存方法。 – jax 2014-08-29 08:44:36

+0

@IgorT我有同样的需求:后端需要一些上下文参数... – 2014-09-23 12:46:08

回答

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#findAllDS.Store#findRecordDS.Store#queryDS.Model#saveDS.Model#destroyRecord,其中的一个参数现在应该有adapterOptions。在DS.Model#save的情况下,您可以覆盖您的适配器中的updateRecord

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

正是我需要的。谢谢 – 2017-02-21 23:03:37