骨干深度克隆问题

时间:2013-09-21 13:45:02

标签: javascript backbone.js

好的,所以我已经深入克隆了骨干模型:

this.parent.views[card_id].previousModel = $.extend(true, {}, this.model);

正如您所看到的,我在父视图中保留了子视图的副本,在更改子视图的模型之前,我正在对此模型进行深度克隆并将其存储在“previousModel”下。

现在,我稍后访问时会发生奇怪的事情。

因此,如果我注销上一个和现在的模型,那么:

console.log( this.parent.views[this.model.get('card_id')].previousModel );
console.log( this.model );

我可以深入研究这些以及所期望的一切,previousModel的属性与this.model的属性不同。如果我退出,请说出我拥有的日期属性:

console.log( this.parent.views[this.model.get('card_id')].previousModel.get('departure_date') );
console.log( this.model.get('departure_date') );

这一切都好 - 在我看到的控制台中:

29-09-2013
28-09-2013

这与我在保存previousModel后更改departure_date后所采取的操作一样正常。

这是奇怪的东西。我还有另一个字段,departure_timestamp。如果我通过向下浏览已记录的模型来查看此属性,我会在previousModel中看到:

departure_timestamp: 1380409200

和this.model中的这个:

departure_timestamp: 1380322800

一切都好。但是如果我尝试访问这些,因为我有了departure_date,通过使用get方法,我看到了:

console.log( this.parent.views[this.model.get('card_id')].previousModel.get('departure_timestamp') );
console.log( this.model.get('departure_timestamp') );

1380409200 
1380409200 

为什么这与使用相同方法访问departure_date时有所不同?在使用get方法确保没有任何东西正在改变之间的departure_timestamp的值时,我甚至已经远远地注销了这两个模型,并且没有,没有。这些值与预期的不同。

那么,使用get方法有什么不同呢?我的第一个想法是深度克隆没有以某种方式克隆方法,我仍然引用原始模型,但这肯定意味着当使用get方法访问departure_date时我会看到相同的结果?

感谢您查看此内容。

1 个答案:

答案 0 :(得分:0)

好的 - 只需在我的代码中设置一个console.logs来跟踪游戏的运行情况。似乎时间戳都设置在一切的结尾。混淆是通过在控制台中看到正确的结果,但我需要记住控制台并不总是提供对属性的实时真实评估。我显然需要收紧我的代码并确保在应该的时候发生。