Backbone JS:如何禁用同步删除?

mvb*_*fst 20 model destroy backbone.js

我正在处理一个线程评论集合,当我删除一个有孩子的评论时,我会做model.destroy()这个评论,并在服务器端删除所有分支.

我编写了一个函数,一旦从树中删除一个节点,就会查找所有孤立并删除它们.因此,当我找到孤儿时,我model.destroy()也会对它们进行操作,但由于它们已经在服务器上删除,因此同步会返回错误.

有没有办法禁用某些destroy()通话的同步?

Edw*_*ith 32

由于所有destroy方法都是发送DELETE请求和触发器destroy,因此简单地触发destroy 就是您正在寻找的.

model.trigger('destroy', model, model.collection, options);
Run Code Online (Sandbox Code Playgroud)

是的,它感觉有点hackish,但这几乎是所有Backbone代码所做的.如果你愿意,如果你有一个扩展的基础模型,你可以将它作为一个方法添加到该基础模型上,它可能不会那么hackish.

  • ```model.collection.remove(model);```有效. (8认同)
  • @EdwardMSmith不足以调用model.trigger('destroy')?是否有必要传递model,model.collection和options参数?感谢您的回答. (5认同)
  • @forresto - 如果模型只在一个集合中,则有效.如果模型是多个集合,则必须知道模型所在的集合并对每个集合执行此操作 - 这意味着在模型中跟踪它所属的集合.那是倒退.通过触发模型上的"销毁",它所在的任何集合都将删除它,并且您不必跟踪模型所在的集合. (4认同)