在jquery排序之后获取底层对象

时间:2013-05-24 18:19:33

标签: javascript jquery-ui knockout.js

我可以获取使用以下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对象列表和新位置?

1 个答案:

答案 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();
        }
      });
  }
};