javascript - Backbone JS : How to cascade Model#destroy?

标签 javascript mysql backbone.js

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

问题

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

示例

考虑这个快速模式:

PERSON
id
name

PHONE_NUMBER
id
person_id
number

EMAIL_ADDRESS
id
person_id
email

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

现在有几种删除Jack所有记录的方法:

方法#1

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

问题

  • 对一项操作的 AJAX 调用过多。
  • 用户将不得不等待很长时间。 (更多的家属,更多的时间)
  • 删除将是非交易性的。如果用户在此期间关闭浏览器,数据将被损坏。

方法#2

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

  • 依赖者的 BackboneJS 模型永远不会知道后端中相应记录发生了什么。因此它们将保持完整。

方法#3

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

  • 与方法#2 中的问题相同

看来这个简单的问题没有完美的解决方案。你也面对过吗?您采取了什么方法?为什么它更好?

最佳答案

我遇到了类似的问题,我采用了方法#2,但有一点不同。

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

在后端,我使用了删除级联,因此我可以进行查询:

从 PERSON 中删除,其中 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

我不确定这是否适合您当前的问题背景,但这与我所做的类似,并且对我有用。

关于javascript - Backbone JS : How to cascade Model#destroy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19394242/

相关文章:

php - 使用递归 PHP 组织 mySQL 数据

php - 如何使用 Codeigniter Active Record CI2 使用 JOINed 表更新数据?

javascript - 将 backbone.js 同步到 php/MySQL

javascript - 对于 Backbone 的深度数据结构有什么建议吗?

javascript - React Router 不会改变组件

javascript - 有什么方法可以在 'simulate' 上右键另存为命令或使用 JavaScript 在浏览器中强制下载文件?

php - 如果 url 与 iframe 标签中设置的不同,则拒绝访问

javascript - 如何使用 jQuery 获取动态更改元素的 HTML 字符串?

mysql - 从 MySQL 获取未回复的消息

javascript - 是否可以在 Backbone.js 中使用 History.loadUrl 重新加载路由并传入用作成功消息的字符串?