2014-09-18 2 views
0

knockout의 새로운 3.2 구성 요소 사양을 사용하여 내부에 foreach 바인딩을 사용하여 구성 요소를 만들어 개체 컬렉션을 렌더링하려고합니다. foreach 바인딩 내부의 객체는 구성 요소의 VM에있는 속성에 액세스 할 수 있어야하지만 foreach 루프에서 해당 참조를 한 번 풀린 것처럼 보입니다.녹아웃 3.2 구성 요소 - foreach 바인딩 내의 구성 요소 viewModel 루트에 액세스 할 수 없습니다.

템플릿의 구성 요소 뷰 모델의 루트에 직접 액세스하는 간단한 방법이 있습니까?

구성 요소 VM :

function RelatedCompaniesViewModel(params) { 
    var self = this; 

    self.companies = params.companies; 
    self.displayLimit = ko.observable(3); 

} 

구성 요소 템플릿 :

<!-- ko foreach: companies() --> 
    <li data-bind="visible: $index() < displayLimit()"> 
     ...more bindings... 
    </li> 
<!-- /ko --> 

(returns a "displayLimit is not defined" error) 
+3

가능한 [바인딩 컨텍스트] 중 하나를 사용 (http://knockoutjs.com/documentation/binding-context.html) 속성. 이 특별한 경우에 [$ parent] (http://jsfiddle.net/w0vgfrbw/) 또는'$ root'가 작동합니다. – Origineil

+0

* facepalm *은 $ parent 컨텍스트가 존재한다는 것을 알지 못했습니다. 위에 나열된 전체 모듈은 다른 구성 요소 안에 중첩되어 있으므로 $ root가 작동하지 않습니다. 매우 도움이됩니다. 감사합니다. – fscof

답변

3

변경 $parent.displayLimit()-displayLimit().

부품 서식 : 이전의 방법과 유사

<!-- ko foreach: companies() --> 
    <li data-bind="visible: $index() < $parent.displayLimit()"> 
     ...more bindings... 
    </li> 
<!-- /ko --> 
관련 문제