1

次の JS Bin コードで移動された UI 要素を取得できますが、JS オブジェクトは取得できません。

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 オブジェクトと新しい位置のリストを取得するにはどうすればよいですか?

4

1 に答える 1

1

コメントで指摘したように、各人の位置を移動したら並べ替え可能に保存しようとしています。そのためには、移動する DOM 要素に関連付けられたモデルにアクセスする必要があります。Knockout は、 という要素に関連付けられたビュー モデルにアクセスするためのユーティリティ関数を提供しますko.dataFor([elem])

.index()移動した要素のインデックスを取得するには、移動したアイテムでjQuery の関数を呼び出すだけです。

ここで例を更新して、状況に合わせて 2 つを連携して使用する方法を示しました: 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();
        }
      });
  }
};
于 2013-05-24T20:51:55.393 に答える