使用Ember Data自定义提交的数据

时间:2014-03-09 04:21:09

标签: ember.js

在Ember,我通常会提交这样的资源:

App.FooNewController = Ember.ObjectController.extend(

  actions:
    submit: ->
      @get('model').save().then ((response) =>
        @transitionToRoute('foo', @content)
      ), (response) =>
        @set "errors", response.errors
)

这是有效的,因为用户输入Foo表单的所有数据都很好地转换为Foo模型。但是包含敏感信息的用户模型呢,比如密码和电子邮件地址呢?我宁愿不在模型中包含该信息。但是,如果它不存在,那么当我提交带有这些字段的用户表单时,即使提交了非敏感数据(如用户名),Ember Data也不会将密码和电子邮件提交给服务器。

所以我的问题是,如何在提交时让Ember Data包含密码和电子邮件字段?我正在使用ActiveModelAdapter。

1 个答案:

答案 0 :(得分:2)

您的模型应包含敏感字段,例如:

App.User= DS.Model.extend({
    userName: DS.attr('string'),
    email: DS.attr('string'),
    password: DS.attr('string'),
    passwordConfirmation: DS.attr('string')
};

但是,当请求用户时,您的服务器不应发送电子邮件/密码信息。在您的视图中,您可以让用户添加此信息,然后执行以下操作:

this.get('model').save();

用户完成的电子邮件和密码将提交给服务器。然后,服务器应回复模型数据的副本,不包括电子邮件和密码,这将导致模型使用空白电子邮件和密码进行更新。

此外,当用户离开您的视图而不向服务器提交数据时,可能会执行以下操作:

this.get('model').rollback();

将回滚用户可能对视图中的字段所做的任何更改。