BackboneJS:如何级联Model#destroy?

时间:2013-10-16 02:22:49

标签: javascript mysql backbone.js

我在后端有一个关系数据库(MySQL),在前端有一个很酷的BackboneJS。我有几个表(BackboneJS术语中的模型)通过外键互连。

问题

如何销毁特定模型,以便破坏级联到所有子模型?

示例

考虑这个快速架构:

PERSON
id
name

PHONE_NUMBER
id
person_id
number

EMAIL_ADDRESS
id
person_id
email

考虑到我们有一个人“杰克”存储在数据库中,带有一些电话号码和电子邮件地址。此外,我们为所有3个表定义了BackboneJS模型/集合,并将数据加载到它们中。前端的用户决定通过点击删除Jack的记录。

现在有几种方法可以删除杰克的所有记录:

APPROACH#1

在与Jack相关的所有型号的PhoneNumbers和EmailAddresses上调用“destroy”,然后在Jack本身上调用“destroy”。

问题

  • 一次操作的AJAX调用太多。
  • 用户必须等待很长时间。 (更多家属,更多时间)
  • 删除将是非交易性的。如果用户在关闭浏览器期间,数据将被破坏。

APPROACH#2

在数据库级别定义外键关系,确保在删除PERSON行时级联删除PHONE_NUMBER和EMAIL_ADDRESS。然后在前端“破坏”Jack的BackboneJS模型。

  • BackboneJS家属的模型永远不会知道后端的相应记录发生了什么。所以它们将保持完整。

APPROACH#3

在服务器端应用程序“/ thorough-delete-person”上创建一个URL(确保删除一个拥有所有依赖项的人)并从前端调用它,而不是在Jack上调用BackboneJS的Model#destroy。

  • 与方法#2相同的问题

因此对于这个简单的问题似乎没有完美的解决方案。你也面对过吗?你采取了什么方法,为什么它更好?

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,我采用方法#2,除了一个区别。

如果可以,请将Jack表示为包含phone_numberemail_address的单个骨干模型。您可以将Jack模型传递给其他骨干视图以共享Jack的模型数据。然后,您可以在destroy型号上致电Jack

在后端,我使用了on delete cascade,因此我可以进行查询:

delete from PERSON where id = JACK_ID;

我不知道mysql的语法,但是像:

 PERSON
  id
  name

 PHONE_NUMBER
  id  references PERSON (id) on delete cascade
  person_id
  number

 EMAIL_ADDRESS
  id  references PERSON (id) on delete cascade
  person_id
  email

我不确定这与你当前的问题背景有多好,但这与我的做法类似,对我有用。