Sencha extjs model.erase 即使服务器出错也会删除模型

Sencha extjs model.erase removes model even when server error

调用 model.erase({failure..., success...}) 时,即使服务器响应 HTTP StatusCode 500,模型也会被删除。失败侦听器被正确触发,但我希望模型不会被破坏。我可以看到它已被销毁,因为它已从商店中移除。

var rec = store.getAt(index);
rec.erase({
     success:function(record, operation){
        // Do something to notify user knows
     }
     failure:function(record, operation){
        // correctly triggered when HTTP = 40x or 50x
        // Would expect that record is still in store. Why not?
        // Of course i could add it again to store with store.add(record) but is that the prefered way?
     }
});

我在 Extjs 6.0 中使用 AJAX 代理

erase 与此处无关。调用 erase 调用模型 drop 方法,该方法将其标记为待删除并将其从任何存储中删除。仅仅因为服务器未能从服务器中删除它并不一定意味着您希望它回到商店中,它仍然只是等待删除。

是的,erase 方法会立即从存储中删除记录,而无需等待服务器的响应。 "hacky" 处理场景的方法是:

  • 将记录的 dropped 属性 设置为 true;
  • 使用 save 方法保存记录(它会生成一个删除请求,但会将记录保留在存储中);
  • 成功时从存储中删除记录,失败时将dropped属性重置为false。

    var record = store.getAt(index);
    record.dropped = true;
    record.save({
        success: function() {
            store.remove(record);
            // do something to notify the user
        }
        failure: function() {
            record.dropped = false;
        }
    });