2012-05-10 5 views
2

내가보기 모델과 같은 설정을했습니다 "는 함수해야 바인딩 제출의 값"녹아웃 JS 오류 :

내보기에서
function viewModel() { 
    var self = this; 
    self.voteOnItem = function (sender, e) { .. } 

    . 
    . 
} 

var model = new viewModel(); 
ko.applyBindings(model); 

, 내가 템플릿의 내부를 가지고 :

<script type="text/html" id="X"> 
    <ul id="" data-bind="foreach:items"> 
<li> 
    <div style="float:left;"> 
      <form action='Url' method="post" data-bind="submit:$parent.voteOnItem"> 
     . 
     . 

"submit 바인딩의 값은 반드시 voteOnItem으로 매핑해야합니다"라는 오류가 발생합니다. 그러나 voteOnItem은 분명히 함수입니다 ... 어떤 이유에서 오류가 발생 했습니까?

+1

제출 바인딩을 수행 할 때 올바른 범위에 있는지 확인합니다. 당신이 얻는 에러는'$ parent'가'voteOnItem' 속성을 갖지 않을 때 ('$ parent.blah'를 넣었을 때와 같이) 보게 될 것입니다. 보기 쉬운 방법은 '

'을 바인딩 위치 근처에 두어 해당 레벨의 데이터를 보는 것입니다. 확인해야 할 또 다른 것은 당신이 모든 태그를 닫았으며''과 같은 잘못된 자기 닫는 태그를 사용하지 않는다는 것입니다. –

+0

JSON 트릭을 시도해 보겠습니다 ... 감사합니다. –

+0

@RPNiemeyer 그게 다야, 대단히 감사합니다! 원할 경우 답변을 게시물에 복사하면 답변으로 표시됩니다. –

답변

4

submit 바인딩을 할 때 올바른 범위에 있는지 확인해야합니다.

$parentvoteOnItem 속성이없는 경우 (예 : $parent.blah을 입력하는 경우) 나타나는 오류가 표시됩니다.

보기 쉬운 방법은 바인딩 근처에 <div data-bind="text: ko.toJSON($parent)"></div>을 붙이면 해당 수준의 데이터를 볼 수 있습니다.

다른 것은 확인한 모든 태그가 닫혀 있고 <span />과 같은 잘못된 자동 마감 태그를 사용하고 있지 않다는 것입니다.

+0

추가하려면, 내 맥락에서 볼 때 더 높은 범위로 가기 위해 $ root를 사용해야했습니다. –

+0

+1 ko.toJSON ($ parent) 트릭 –