骨干深度克隆问题

Backbone deep cloning issue

本文关键字:问题 深度      更新时间:2023-09-26

好的,所以我在骨干中深度克隆了一个模型:

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

而这个模型:

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时我会看到相同的结果?

感谢您查看此内容。

好的 - 只需在我的代码中设置控制台.logs的负载即可跟踪游戏运行。似乎时间戳是在一切的末尾设置的。混淆是由于在控制台中看到正确的结果,但我需要记住,控制台并不总是对属性进行实时真实评估。我显然需要加强我的代码,并确保事情在应该发生的时候发生。