2017-06-21 79 views
1

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

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

回答

2

erase使用AJAX代理是不是真的与此有关。调用erase调用模型drop方法,该方法将其标记为待定删除并将其从任何商店中删除。仅仅因为服务器无法从服务器上删除它并不一定意味着您希望它回到商店中,它仍然只是待删除。

+0

那么这将是赶上这种情况下,最好的方法是什么? – Rob

+1

在模型上调用'reject'来重置掉落的状态,然后重新添加到商店,如果这是你想要发生的事情。 –

+0

好吧,我明白了。已经猜到了,但是它被添加到了不同的位置。 extjs方式没有更好的方法吗? – Rob

3

是的,erase方法立即从商店中删除记录,而不用等待服务器的响应。处理你情况的“hacky”方式将是:

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

    var rec = store.getAt(index); 
    rec.dropped = true; 
    rec.save({ 
        success: function() { 
         store.remove(rec); 
         // Do something to notify user knows 
        } 
        failure: function() { 
         rec.dropped = false; 
        } 
    }); 
    
相关问题