我可以获取使用以下JS Bin代码而不是JS对象移动的UI元素。
http://jsbin.com/edopuh/14/edit
ko.bindingHandlers.Sortable = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = ko.utils.unwrapObservable(valueAccessor() || {});
$(element).sortable({
items: 'li:not(".notsortable")',
update: function(event, ui){
alert("you just moved " + $(ui.item[0]).text());
}
});
}
};
移动完成后,如何获取Person对象列表和新位置?
答案 0 :(得分:1)
正如您在评论中所指出的那样,您希望在移动后将每个人的位置保存在可排序的中。为此,您需要访问附加到正在移动的DOM元素的模型。 Knockout提供了一个实用程序函数,用于访问与名为ko.dataFor([elem])
的元素关联的视图模型。
为了获取移动元素的索引,您只需要在移动的项目上调用jQuery的.index()
函数。
我已在此更新您的示例,以演示如何在您的情况下使用两者:http://jsbin.com/edopuh/27/edit
ko.bindingHandlers.Sortable = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = ko.utils.unwrapObservable(valueAccessor() || {});
$(element).sortable({
items: 'li:not(".notsortable")',
update: function(event, ui){
var $item = $(ui.item[0]),
person = ko.dataFor(ui.item[0]);
alert("you just moved " + $item.text());
person.position = $item.index();
}
});
}
};