Backbone:Collection#是否返回模型或模型对象本身的副本?

时间:2015-05-05 22:02:15

标签: backbone.js

我一直难以理解在Backbone中操作模型时会发生什么。

1)当调用Collection上的#get来“抓取”模型时,模型与Collection的模型模型是否相同? (例如,更新模型将更新Collection的模型)

2)如果将模型添加到各种集合中,那么所有这些集合是否都包含实际模型(或模型的“副本”)?在我看来,它是“副本”,因为当我试图销毁已添加到各种集合中的模型时,并非所有模型都被销毁。

谢谢!欣赏任何见解。

1 个答案:

答案 0 :(得分:0)

与Javascript中的每个其他对象一样,Backbone对象为“passed by a copy of the reference”。考虑这一点的最好方法是javascript在内存中有一段数据,而变量只不过是指向那些数据位的指针。当你将一个变量设置为另一个时,你真正得到的是指针的两个副本,它们都指向内存中的同一条数据。所以,将此问题应用于您的问题:

  1. 是。当你“获得”模型时,你从骨干中获得的是一个 指向存储对象的内存中的位置的指针。轮到你了 有两个指针(一个在集合中,一个在你的变量中),你可以对它们中的任何一个执行操作 并且要么对同一条数据执行该操作 存储器中。
  2. 有点儿。每个集合都有一个指向它的指针 对象/模型。从集合中删除该指针时, 其他指针仍然指向同一块内存,那就是 内存没有被删除,因为它仍然被其他人指向 集合。 model.destroy() will trigger a destroy event on both the model and the collection it is holding a pointer to in it's collection attribute。但是,模型不能保持指针 多个集合,如果它是多个集合的一部分。 因此,在destroy事件中,它仅从上次分配给它的集合中删除 - 它在model.collection属性中保存的集合。通常,当没有变量持有指向内存中的数据的指针时,该内存将被擦除,但是,在这种情况下,因为您的其他集合具有指向模型的指针,所以模型作为这些集合的一部分保留在内存中。