参考在奥里利亚
我有显示两个不同的数据集的一个观点: 假设proposalDetails和订单明细。 我继承了一些试图将这两个类作为成员备份的代码。参考在奥里利亚
在下面的评论代码的问题是,该类功能不被克隆。只有成员。在另一方面保持2班作为参考,当我来回切换
(proposalDetails和订单明细之间)的作品就好了是否有一个原因,保持基准是坏的/不正确的做法?
有危险,当我修改proposalDetails,ORDERDETAILS太修改?
switchView(viewName) {
if (viewName === 'proposal') {
//this.orderBackup = JSON.parse(JSON.stringify(this.orderDetails));
//this.orderDetails = JSON.parse(JSON.stringify(this.proposalDetails));
//'Cloning' the member like this does not include all the class functions
//I changed it to keep just the reference
this.orderBackup = this.orderDetails;
this.orderDetails = this.proposalDetails;
$('#view_ordered').removeClass('active');
$('#view_proposal').addClass('active');
this.formDisabled = true;
return;
}
this.orderDetails = this.orderBackup;
}
你问什么是不特定奥里利亚可言,比的其实其他奥里利亚促进对您的视图模型使用类。我已经使用了JSON技巧来做简单的类复制,它完成了工作,说实话不是你能做的更糟糕的事情。
值得指出的是Lodash对克隆的对象都深深浅浅,以及一些非常实用的功能。
我想这不是特定于aurelia。但为什么我需要克隆呢?当修改proposalDetails时,是否有任何危险,orderDetails也被修改?我更新了我发布的代码 – Spiff
带有Javascript的东西是一切都通过引用传递。在大多数情况下,这可能很好。但是在你的情况和我发现自己处于的状况下,有时你想存储状态,然后用它来恢复更改或进行比较。这就是为什么像RxJs这样的解决方案很受欢迎,因为它们处理状态并提供不变性(这就是你所追求的)。当你将一个对象分配给一个变量并且改变它时,因为你只是引用了一个指针,那些指定了该对象的指针就会得到这些变化。这只是一个Javascript设计功能。 –
但我'保存'在this.orderBackup = this.orderDetails ref,修改orderDetails不应该影响orderBackup。在Java中,所有的东西都被refrerence传递。但orderBackup不可修改 – Spiff
这没有任何意义。如果你改变'orderDetails',你也会改变'orderDetailsBackup'。 –
@fabioLuz感谢您指出了这一点。我更正了示例 – Spiff