2012-07-31 4 views
0

REST API에서 가져온 JSON 배열이 있습니다. Knockout 매핑 플러그인을 사용하여 배열을 처리하고 JSON을 사전 설정된 양식 값으로로드합니다 (이전에 양식에 값을 추가 한 경우 - 녹아웃 배열을 테스트하기위한 데이터가 있음). 양식은 기본적으로 div 블록을 입력으로 추가하거나 삭제하므로 사용자는 "업무"경험을 추가/삭제할 수 있습니다.녹아웃 매핑 플러그인 - 캡처 배열 값

제 문제는 플러그인이 배열을 매핑하는 방법을 해독하려고하는 것입니다. 배열에서 행의 특정 값 (ID)을 찾으려고합니다. 변수로 추가하여 특정 행을 삭제하도록 API에 알릴 수 있습니다. 명시 적으로 html의 행 값을 출력하도록 Knockout을 얻을 수는 있지만 그렇지 않으면 캡처하는 방법을 알 수 없습니다. "foreach"템플릿에서 "remove :"를 참조하는 버튼이 있는데, 그 위치에서 배열의 값을 캡처하려고합니다. 문제 개체하지

이것은 "작업"의 두 개의 행을 출력한다 : 다음 HTML 예를 들면

<span data-bind="text: ko.mapping.toJSON(workModel.work())"></span> 

[{"id":"1","schoolID":"2","place":"","position":"Science Teacher","description":"I worked at ASD for 1 year as a Science teacher.","start":"2011","end":"2012","profileID":"91"},{"id":"2","schoolID":"1","place":"American School of Taiwan","position":"Science Guy","description":"I was just another science guy","start":"2008","end":"2011","profileID":"91"}] 

이 배열에서 1 행 항목의 ID를 출력한다 :

<span data-bind="text: ko.mapping.toJSON(workModel.work()[0].id)"></span> 
"1" 

그러나 자바 스크립트에서 , 당신은 foreach는 템플릿에 의해 생성 된 제거 버튼을 클릭하면 ...

,
gone = function(work) { 

     alert(ko.mapping.toJSON(workModel.work(this).id)); 

    } 

Firebug에서이 오류가 발생하고 방금 클릭 한 템플릿 블록이 다시로드되고 삭제됩니다. 내가 명시 적 문 위의 경고 교체 할 경우

Unable to parse bindings. Message: TypeError: workModel.work()[0] is undefined; Bindings value: text: ko.mapping.toJSON(workModel.work()[0].id) 

는 비록 :

gone = function(work) { 

     alert(ko.mapping.toJSON(workModel.work()[0].id)); 

     } 

을 다시 "1"의 정확한 값을 얻을. 코드의 "이"측면과 관련이 있다는 것을 알고 있지만 배열에서 특정 값을 캡처 할 수 있도록 매핑 플러그인이 무엇을하는지 확신 할 수 없습니까? 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

저는 여기 사지를 갈 것입니다.하지만 나는 이것이 문제라고 생각합니다. Javascript의 범위 지정은 때때로 번거 로움이 될 수 있습니다.

var self = this; 
gone = function(work) { 
    alert(ko.mapping.toJSON(workModel.work(self).id)); 
} 

면책 조항 : 다음 사라 기능을 포함하는 범위에서이 같은 일을 시도 내가 지금이 나 자신을 테스트하지만, 그것을 시도 :) 마지막으로

+0

죄송합니다. 시도해 보지 않으 셨습니다. 만약 내가 단순한 'alert (self.workModel.work(). length);' 모든 배열에 대해 올바른 값을 얻습니다. 내가 얻을 수없는 유일한 가치입니다. – user1557966

+0

더 많은 코드를 게시해야합니다. 더 완벽한 마크 업과 자바 스크립트를 게시하십시오. –

0

I을 줄 수 아니에요 알았다. Stack Overflow와 Knockout 포럼에서 다른 게시물을 결합하여 왔습니다. 나는 다른 사람들이 이것보다 더 우아한 해결책을 가지고 있다고 확신하지만 그것은 나를 위해 일한다.

"삭제"에 foreach 루프에서

(또는 값을 캡처하는 데 사용할 어떤 버튼)을 데이터 바인드에 다음과 같은 I 포함 버튼을 : 내가 가지고있는 자바 스크립트에 다음

<a href="" class="btn" data-bind="click: function() { remove($data.id()); }">Remove</a> 

:

var self = this; 
var row_id; 

self.remove = function(index){ 
      var row_id = index; 
      alert(row_id); 

    } 

경고는 내가 원했던대로로드 된 JSON의 행 ID를 반환합니다. $ data.id()는로드 된 JSON에서 매핑 된 요소를 반환하기 위해 변경하거나 사용할 수 있습니다. row_id는 다른 곳에서도 액세스 할 수있는 전역입니다.

관련 문제