我正在使用 Sortable 库(https://github.com/RubaXa/Sortable)在两个列表(模型)之间创建拖放关系。为清楚起见,我们称其为 SourceModel 和 DestinationModel。
项目从 SourceModel 拉(并克隆)到 DestinationModel。放入 DestinationModel 的项目使用 ng-repeat(DestinationModel 跟踪 $index 中的 listItem)呈现,该项目由索引跟踪。
我遇到的问题是,当您克隆项目时,任何相同类型的生成克隆都是“数据绑定的”,因此由于我使用 contenteditable 来操作对象,所有相同类型的对象被改变了,包括原来的。(因此该类型的后续拖动也发生了变化)
你可以在这里看到问题:
在本次会议期间,两个顶部组件被拖入,当您更改一个时,您同时更改了两个。但是,页面加载时已经存在的对象没有绑定,因此不会随着其他两个的变化而变化。
保存配置并刷新后,由于项目是按索引跟踪的,所以一切都独立且正常。
我尝试在 Sortable 中使用 onAdd() 回调对添加时的项目进行深层复制,但这不起作用。
https://github.com/RubaXa/Sortable#options
onAdd: function (e, c) {
c = angular.copy(c);
},
我还尝试通过以下函数强制数组在删除后“清理”哈希键的模型:
model.cleanseStack = function() {
stack = JSON.parse(angular.toJson(stack));
};
但是,我也没有太多运气 - 对象仍然是绑定的。
我怎样才能确保我打破了对象之间存在的数据绑定。我仍然需要在标记和模型之间独立绑定它,但是,它们不应该绑定在一起。
注意:我没有使用 jQuery。最多,我可以访问 jqlite 作为 AngularJS 框架的一部分。