1

ページにKnockout.jsを使用しています。私のViewModelにはオブジェクトの配列が含まれています。各オブジェクトには、子の配列が含まれています。より一般的には、これは列と列の内容を含むテーブルを表す必要があります。

まず、foreach:itemArrayを処理して列を取得します。次に、ネストされたforeach:childsを使用しています。ここで、childsは列コンテンツの配列です。

MyChildsは列間でドラッグ可能である必要があります。したがって、ネストされたforeachを見つけたjsに置き換えました

https://github.com/rniemeyer/knockout-sortable

http://jsfiddle.net/rniemeyer/Jr2rE/

再びコードで-最初の段階:

<div id="lanesContainer" data-bind="foreach: lanes">

次に、ネストされたforeach(#lanesContainer内)をたどります

<ul data-bind="sortable: { template: 'laneTemplate', data: childs, afterMove: $root.dropCallback }">

アイテムはドラッグ可能になりましたが、ドロップはどういうわけか失敗します。私のデバッガーはjsの次の部分で壊れます:

//take destroyed items into consideration
if (!templateOptions.includeDestroyed) {
  targetUnwrapped = targetParent();
  for (i = 0; i < targetIndex; i++) {
    //add one for every destroyed item we find before the targetIndex in the target array
    if (targetUnwrapped[i] && targetUnwrapped[i]._destroy) {
      targetIndex++;
    }
  }
}

targetParentは関数ではなくオブジェクトであるため、3行目で中断します。どうすれば問題を解決できますか?

4

2 に答える 2

1

変化するtargetUnwrapped = targetParent();

targetUnwrapped = ko.utils.unwrapObservable(targetParent);
于 2013-02-19T07:55:55.160 に答える
0

OK、これまでのところありがとう。My ViewModelには、各ドロップで呼び出される関数が含まれています。

self.dropCallback = function (arg) {
    var item = arg.item;
    var sourceParent = arg.sourceParent();
    var targetParent = arg.targetParent();
    blah(); //console.log("Moved '" + arg.item.name() + "' from " + arg.sourceParent.id + " (index: " + arg.sourceIndex + ") to " + arg.targetParent.id + " (index " + arg.targetIndex + ")");
};

変数sourceParentとtargetParentは、foreachに使用された配列を表すようになりました。次の親まで、どうすればもう1レベル上に「歩く」ことができますか?

于 2013-02-19T14:02:32.647 に答える