6

所以现在当我销毁模型并且服务器返回错误时,销毁事件无论如何都会被触发并且模型数据被重置..

有没有办法防止这种情况发生?

4

1 回答 1

7

您可以{wait: true}作为选项传递给destroy(),这会导致它在从集合中删除模型之前等待来自服务器的响应。

在将视图绑定到事件方面,您应该分别处理removedestroy事件,因为remove事件将在服务器成功返回时触发,但在服务器返回错误时不会触发。

或者,您可以将error处理程序传递给model.destroy,然后如果服务器因任何原因失败,您可以使用该处理程序将模型放回原处。要么简单地将模型添加回您的集合中(如果有的话),要么使数据从服务器重新加载(这可能是更安全的选择)。

请注意,使用此方法时,remove事件仍会触发,并且add在您放回模型时会触发一个事件。

thing.destroy({error: function(model, response) {
  // put the thing back in the collection, or cause the collection to reload
}});

您提到正在重置模型数据;我相信model上面错误处理程序中的参数接收原始模型,因此您仍然可以访问其数据。

有关更多信息,请参阅主干文档 - http://backbonejs.org/#Model-destroy

于 2012-11-27T22:00:45.957 回答