2012-09-04 4 views
1

ListView에 해당 객체의 최신 세부 정보가 표시되지 않는 문제가 있습니다. dataSource는 WinJS.Binding.List 개체의 createSorted method을 호출하여 만들어집니다.기본 객체가 변경 될 때 ListView가 업데이트되지 않습니다

var obj = { 
    title: 'First item', 
    priority: 2 
}; 

그리고 나는 /이 같은 데이터 소스를 설정 생성 : 각 객체는 다음과 같습니다

<div id="itemTemplate" data-win-control="WinJS.Binding.Template"> 
    <div> 
     <h4 data-win-bind="innerText: title"></h4> 
    </div> 
</div> 

변화 핸들러 :

sortedItemList = itemList.createSorted(function (lhs, rhs) { 
    return rhs.priority - lhs.priority; 
}); 
listView.itemDataSource = sortedItemList.dataSource; 

ListView에 대한 ItemTemplate을은 다음과 같습니다 두 필드는 다음과 같습니다.

titleControl.onchange = function() { 
    curItem.title = titleControl.value; 
    sortedItemList.notifyMutated(sortedItemList.indexOf(curItem);); 
}; 
priorityControl.onchange = function() { 
    curItem.priority = priorityControl.value; 
    sortedItemList.notifyMutated(sortedItemList.indexOf(curItem);); 
}; 

createSorted에 대한 설명에 따르면 객체가 변경 될 때마다 notifyMutated를 호출해야합니다. 우선 순위를 변경하면 ListView가 항목을 적절히 이동합니다. 그러나 제목을 편집하면 ListView가 새 제목을 표시하도록 업데이트되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

기본 DataSource에서 notifyMutated가 호출 될 때 ListView가 해당 요소를 명시 적으로 다시 바인딩하지 않는 것처럼 보입니다. notifyMutated를 호출하면 요소가 이동하게되고, 요소가 소멸되어 재 작성되기 때문에 리바운드됩니다. 그렇지 않으면 재 Y 인드가 _ 생해야합니다. 내 변경 핸들러의 모양은 다음과 같습니다.

var notifyMutated = function() { 
    var prevIndex, 
     postIndex; 

    prevIndex = sortedItemList.indexOf(curItem); 
    sortedItemList.notifyMutated(prevIndex); 
    postIndex = sortedItemList.indexOf(curItem); 

    if (postIndex !== prevIndex) { 
     WinJS.Binding.processAll(listView.elementFromIndex(postIndex), curItem); 
    } 
}; 

titleControl.onchange = function() { 
    curItem.title = titleControl.value; 
    notifyMutated(); 
}; 
priorityControl.onchange = function() { 
    curItem.priority = priorityControl.value; 
    notifyMutated(); 
}; 
+0

JS 템플릿을 사용하는 경우이 코드는 어떻게 작동합니까? – rbyrne

관련 문제