2012-01-19 2 views
0

저는 명명 된 템플릿을 사용하고 이에 대한 데이터 목록을 바인딩하고 있습니다. 바인딩이 잘 작동하지만 $ parent.inState() 호출에서 오류가 발생합니다. 아래 샘플을 보면 :

<div data-bind="template: { name: 'peopleScript', data: people }"> </div> 

<script id="peopleScript" type="text/html"> 
    <ul data-bind="foreach: people"> 
     <li> 
      Name: <span data-bind="text: name"> </span> 
      State: <span data-bind="{ text: state, css: { outOfState: !$parent.inState($data) } }"> </span> 

      <span data-bind="visible: ($parent.inState($data))"> 
       In State 
      <span> 

      <a href="#" data-bind="click: $parent.removePerson">Remove</a> 
     </li> 
    </ul> 
    <button data-bind="click: addPerson">Add</button> 
</script> 

$parent.inState은 기능이 아닙니다. 나는 이미 $parents을 시도했지만 아무 소용이 없습니다. 바인딩 작업을 적용하는 코드는 알고 있습니다. 템플릿을 인라인하면 템플릿이 잘 작동합니다. 나는 또한 다른 모든 것들이 OK라는 것을 알았고 그것은 메쏘드에 접근 할 수있다. 그래서 그것은 단순히 어떤 이유로 inState를 찾을 수 없습니다.

왜 그런가?

감사합니다.

답변

2

당신이 당신의 구조가 정말 people.people하지 않는 한 사람이, 다음 ($dataforeach 원하는 것처럼 data을 전달하는

당신은 할 수 :.

<div> 
    <ul data-bind="template: { name: 'peopleScript', foreach: people }"></ul> 
</div> 

단지에 li이 템플릿을 사용하거나 현재 구조를 사용하여 $dataforeach을 입력하십시오.

issu e가 inState 인 경우 template은 하나의 범위를 만든 다음 foreach 바인딩은 다른 하나의 범위를 만듭니다. 그래서, 당신이 안에있을 때, 당신은 두 가지 범위를 올라야 할 것입니다. 당신은 같은 $parents[1] 사용하여이 작업을 수행 할 수 있습니다 : http://jsfiddle.net/rniemeyer/RNWML/ 또는 정말 최상위 레벨에있는 경우, 다음 $root 사용하는 등 가장 쉬운 선택이다 : 그것은 내가 장난 한 뭔가 :-) http://jsfiddle.net/rniemeyer/RNWML/2/

+0

내 구조가 정말 people.people됩니다. $ parents [1]이 트릭을했는데, 고마워. –