【问题标题】:Ember remove record on invalid server validationEmber 删除无效服务器验证的记录
【发布时间】:2013-07-09 20:42:56
【问题描述】:

我正在尝试创建记录,并且在服务器端我正在使用 rails。 rails 验证失败,我返回 422 状态代码,但是当我在 becomeInvalid 回调中删除它时,它不会从模板中删除。它只是显示一个空白条目。

当它等待服务器加载时,它只显示名称,这是预期的。

Ember 型号代码

App.Job = DS.Model.extend({
  name : DS.attr("string"),
  user : DS.belongsTo("App.User", {embedded : "load"}),
  plans : DS.hasMany("App.Plan", {embedded : "load"}),
  shares : DS.hasMany("App.Share", {embedded : "load"}),

  becameInvalid : function(data){
    this.deleteRecord();
  }
});

Ember 控制器调用

PlanSource.Job.createRecord({"name" : name});
job.save();

Rails 创建方法

def create
  if can? :create, Job
    @job = Job.new(name: params["job"]["name"], user_id: current_user.id)
    if !@job.save
      render :json => {job: @job}, status: :unprocessable_entity
      return
    end
    if
      render :json => {:job => @job}, include: [:plans, :user, :shares => {except:   :token, include: [:user, :job]}]
    else
      render_no_permission
    end
  else
    render_no_permission
  end
end

我的问题是处理服务器端验证错误的最佳方法是什么。我不想尝试重新提交记录,我只想删除它。我一直在寻找让 Ember 等待服务器响应的东西,但什么也没找到。

此方法不起作用,因为它在删除后会导致模型管道中出现未定义的错误。

【问题讨论】:

    标签: ruby-on-rails ember.js


    【解决方案1】:

    我的问题是处理服务器端验证错误的最佳方法是什么。

    不确定是否有最好的方法。取决于您希望在 UI 中发生什么。通常,您会希望让用户知道记录未保存并提供一些信息,说明出了什么问题。

    我不想尝试重新提交记录,我只想删除它。

    好的。如果记录是新的,delete 并没有真正意义,但您可能想要做的是回滚事务?试试this.transaction.rollback()this.rollback()。例如:

    App.Job = DS.Model.extend({
      name : DS.attr("string"),
      user : DS.belongsTo("App.User", {embedded : "load"}),
      plans : DS.hasMany("App.Plan", {embedded : "load"}),
      shares : DS.hasMany("App.Share", {embedded : "load"}),
    
      becameInvalid : function(data){
        this.transaction.rollback();
      }
    });
    

    见:How to deleteRecord when it was never committed on the backend?

    我一直在寻找让 Ember 等待服务器响应的东西,但什么也没找到。

    model.save() 返回一个承诺。这意味着您可以像这样添加成功/失败处理程序:

    PlanSource.Job.createRecord({"name" : name});
    var success = function(model) {
      alert('ok');
    };
    var failure = function(model) {
      alert('fail');
    };
    job.save().then(success, failure);
    

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多