0

我正在使用 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 框架的一部分。

4

1 回答 1

0

这是在 Sortable 库本身中修复的:

https://github.com/RubaXa/Sortable/commit/fff7711238f9fc77fb1329aa5417aff4fdfbe0f0

于 2015-01-28T06:35:56.023 回答