我有一个允许用户移动项目的 UL 列表。我与淘汰赛绑定,因为我想将他们的选择保存回数据库。
排序有效,但是 UI 会复制 UI 中拖动的元素。viewmodel 的数据是正确的,我可以看到它没有在数据中创建额外的元素。
我在这里有一个小的 jsfiddle 示例
任何帮助都是极好的。
我有一个允许用户移动项目的 UL 列表。我与淘汰赛绑定,因为我想将他们的选择保存回数据库。
排序有效,但是 UI 会复制 UI 中拖动的元素。viewmodel 的数据是正确的,我可以看到它没有在数据中创建额外的元素。
我在这里有一个小的 jsfiddle 示例
任何帮助都是极好的。
也许?
<script type="text/javascript">
$(function () {
var curr;
$("#giftListEditor").sortable({
start: function (event, ui) {
curr = viewModel.gifts()[ui.item.index()];
},
update: function (event, ui) {
var currIndex = ui.item.index();
viewModel.gifts.remove(curr);
viewModel.gifts.splice(currIndex == -1 ? 0 : currIndex, 0, curr);
}
}).disableSelection();
});
</script>
更新了 jsFiddle:http: //jsfiddle.net/JVhZe/2/
我已经替换ui.item.removeData('previous_index');
为ui.item.remove()
. removeData
是一种用于清理自定义数据的 jQuery 特定方法。您不必调用此方法,因为当您取消绑定/删除元素时,Knockout 已经为您执行此操作。
顺便说一句,我建议您看一下 Knockout 可排序列表的出色实现: