2013-07-12 1 views
0

나는 Durandaljs를 사용하고 있으며 재사용 가능한 위젯을 만들고 있습니다. 위젯은 훌륭합니다! 그러나 하나의 위젯에 하위 위젯의 항목 수를 가져 오는 방법을 만들려고합니다.Durandal의 하위 위젯에서 항목 수에 어떻게 액세스 할 수 있습니까?

예를 들어 두 개의 위젯, 즉 페이지 섹션을 접을 수있는 아코디언 위젯과 목록에 항목을 표시하는 두 번째 위젯이 있습니다.

다른 위젯의 하위 목록 항목 수를 갖기 위해서는 아코디언 위젯의 제목이 필요합니다. 또는 단어 개수를 표시 할 수도 있습니다. 기본적으로 콘텐츠 내부에서 셀 수는 무엇인지 지정해야하며 콘텐츠 유형에 따라 다를 수 있습니다.

간단히 말해, 다른 위젯 내부에서 하나의 위젯을 하드 코딩하지 않고 상위 위젯과 하위 위젯간에 통신하는 방법이 필요합니다. 개발자는 개수를 원하는대로 명시 적으로 선언해야합니다.

ko.bindingHandlers.counter = { 
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
    alert('init'); 
    var value = valueAccessor(); 
    $(element).text(bindingContext.$parent.settings.items.length); 
}, 
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
    alert('update'); 
    var value = valueAccessor(); 
    $(element).text(bindingContext.$parent.settings.items.length); 
} 
}; 

위 작동하지 않습니다 내가 도착했을 때 "작업", 그것은 단지 처음에 일을 할 수 있기 때문에, 업데이트하셨습니까 : 나는 시도했지만 작동하지 않거나 좋아하지 않는 것

가. 길이() 나는 settings.items를 사용하는 경우에도 BindingContext를 내부가이 관찰되지 않습니다 때문에 오류가 발생했습니다 관측을보고하고,

bindingContext.$parent.settings.items().length 

로 변경되지 않았기 때문에 '는 t 표시 얻을 자식 위젯과 업데이트 된 바운드 관측 가능하기 때문에 작동했습니다.

또한 jQuery를 사용하여 항목을 계산할 수도 있지만 이는 HTML 블록에만 적용되고 관찰 가능 항목에는 데이터 항목이 아니라고 생각하면 적합하지 않은 것으로 보입니다.

$(document).on('DOMNodeInserted', '.contentWidget', function() { 
    var $t = $(this); 
    var count = $('.contentItem', $t).length; 
    var $parent = $t.closest('[data-countable]'); 
    var $countEl = $parent.find($parent.attr('data-countable')); 
    if ($countEl) { 
     $countEl.text(count); 
    } 
}); 

마지막으로, 다른 확실히 사람과 비슷한 일을하고 나는 아직 그것을 발견하지 않았거나 내가 durandal 문서 또는 하나에서 뭔가를 놓친 적이 있기 때문에이 작업을 수행 할 수있는 간단한 방법을 누락 녹아웃 워드 프로세서.

답변

0

다른 위젯에 액세스하는 대신 위젯간에보기 모델을 공유하는 것이 좋습니다. 이게 뭐니 뭐니?

<div data-bind="accordion:{headerModel:childViewModel}"></div> 
<div data-bind="listItems:{itemsModel:childViewModel}"></div> 
+0

내가 그 일을 끝내 었습니다. 나는 그것이 더 합리적이라고 생각한다. 내 경우에는 하나의 위젯이 다른 하나를 포함 할 것이지만 그 아이디어는 동일합니다. 감사! – Nate

관련 문제