好的,所以我在主干中深度克隆了一个模型:
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 方法访问离开日期时会看到相同的结果?
谢谢你看这个。