0

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

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 后所做的操作是更改离开日期一样预期。

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

departure_timestamp: 1380409200

这在this.model中:

departure_timestamp: 1380322800

都好。但是,如果我尝试访问这些,因为我有离开日期,通过使用 get 方法,我会看到:

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

1380409200 
1380409200 

为什么这与我使用相同方法访问离开日期时不同?我什至甚至在使用 get 方法后再次注销这两个模型,以确保没有任何东西改变了中间的 department_timestamp 的值,不,什么都没有。值与预期的不同。

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

谢谢你看这个。

4

1 回答 1

0

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

于 2013-09-21T13:52:42.793 回答