1

내 페이지에 Knockout.js를 사용하고 있습니다. 내 ViewModel에는 객체 배열이 포함되어 있습니다. 각 객체에는 하위 배열이 있습니다. 보다 일반적으로 이것은 열과 열 내용을 포함하는 테이블을 나타내야합니다.넉 아웃 정렬 가능 캐치 복잡한 객체

먼저 foreach : itemArray를 처리하여 열을 가져옵니다. 그런 다음 중첩 된 foreach : childs를 사용합니다. 여기서 childs는 열 내용의 배열입니다.

내 Childs는 열 사이에서 드래그 가능해야합니다. (#lanesContainer 내에) 중첩 foreach는 다음이어서

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

: 첫번째 단계 - 따라서 난 JS와 중첩의 foreach 난 코드 다시

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

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

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

내 아이템은 이제 드래그 가능하지만 떨어지는 것은 어떻게 든 실패합니다. 은 targetParent가 객체가 아닌 함수이기 때문에,

//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++; 
    } 
    } 
} 

그것은 세 번째 줄에서 나누기 : 내 디버거는 JS의 다음 부분에 나옵니다. 문제를 어떻게 해결할 수 있습니까?

답변

0

OK 덕분에 지금까지. 내 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에 사용 된 배열을 나타냅니다. 다음 부모에게 어떻게 한 걸음 더 올라갈 수 있을까요?

+0

좋습니다. sourceParentNode.parent() – redflag237

1

변경 targetUnwrapped = targetParent();

targetUnwrapped = ko.utils.unwrapObservable(targetParent);