首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BackboneJS:如何级联Model#destroy?

BackboneJS:如何级联Model#destroy?
EN

Stack Overflow用户
提问于 2013-10-16 02:22:49
回答 1查看 213关注 0票数 0

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

问题

我如何摧毁一个特定的模型,使销毁级联所有的儿童模型?

示例

考虑一下这个快速模式:

代码语言:javascript
运行
复制
PERSON
id
name

PHONE_NUMBER
id
person_id
number

EMAIL_ADDRESS
id
person_id
email

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

下面是删除Jack所有记录的几种方法:

APPROACH#1

在与杰克相关的所有型号的PhoneNumbers和EmailAddresses上调用“破坏”,然后对杰克本身调用“破坏”。

问题

  • 太多的AJAX需要一个动作。
  • 用户将不得不等待很长时间。(更多受抚养人,更多时间)
  • 删除将是非事务性的。如果用户在此期间关闭浏览器,则数据将被破坏。

APPROACH#2

在数据库级别定义外键关系,以确保删除PERSON行时PHONE_NUMBERs和EMAIL_ADDRESSes的级联删除。然后“摧毁”BackboneJS模型的杰克在前面。

  • 用于受抚养人的BackboneJS模型永远不会知道后端相应记录发生了什么变化。这样它们就会完好无损。

APPROACH#3

在服务器端的应用程序上创建一个URL“/- delete - person”(确保删除一个带其所有受抚养人的人),并从前端调用它,而不是调用杰克上的BackboneJS的Model#destroy。

  • 与Approach#2中的问题相同

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

EN

回答 1

Stack Overflow用户

发布于 2013-10-16 04:20:34

我遇到了一个类似的问题,我采用了方法2,除了一个不同之处。

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

在后端,我使用了一个on delete cascade,这样我就可以进行查询了:

delete from PERSON where id = JACK_ID;

我不知道mysql的语法,但如下所示:

代码语言:javascript
运行
复制
 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

我不确定这是否适合您当前的问题上下文,但这与我所做的类似,而且它对我有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19394242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档