骨干深度克隆问题
Backbone deep cloning issue
好的,所以我在骨干中深度克隆了一个模型:
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的负载即可跟踪游戏运行。似乎时间戳是在一切的末尾设置的。混淆是由于在控制台中看到正确的结果,但我需要记住,控制台并不总是对属性进行实时真实评估。我显然需要加强我的代码,并确保事情在应该发生的时候发生。
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何消除代码中的未定义和其他问题
- JavaScript代码问题:我正在将对象转换为数组
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 由于iframe导致的问题
- 骨干深度克隆问题
- 使用 AngularJS ui-router 深度链接到 URL 的问题