2011-09-30 3 views
0

나는 ko.mapping 플러그인과 매핑하는 JSON 문자열을 가지고 있으며 매핑 된 배열 중 하나에 대해 관찰 가능 바인딩을 만들어야합니다. 배열은 [1,2,3,4,5]와 같이 JSON에 있으므로 인덱스가 없습니다. 이 Knockout.js 및 ko.mapping이있는 단일 치수 배열의 템플릿

<script id="statRowTemplate" type="text/html"> 
    {{if type() != "column"}} 
    <tr> 
      <td><label>Name: </label><input data-bind="value: name" /></td> 
      <td><label>Plot Points: </label><ul data-bind="template: {name: 'dataTemplate' , foreach: data}"></ul> </td> 
    </tr> 
    {{/if}} 
</script> 
<script type="text/html" id="dataTemplate">   
<li> 
    <p>${this.data}</p> 
     <input data-bind="value: this.data" /> 
</li> 
</script> 
<button data-bind="click: saveChanges">Save Changes</button> 

그래서 모든 <input data-bind="value: this.data" /> 제외하고 예상대로 필드가 빈 상태로 작업 ... ${this.data} 그러나 올바른 값을 보여줍니다 :

나는 특정 지점에 근무하는 다음과 같은 코드가 있습니다.

전반적으로 JSON 문자열을 업데이트하고 플랫 파일로 다시 저장하려고합니다. 데이터 배열을 [1,2,3,4] 입력 값에 직접 바인딩 할 수 있지만 배열로 업데이트되지 않습니다.

다음은 viewModel입니다. var viewModel = {}; 어떤 도움을 크게 감상 할 수

[ { "type":"spline", "marker":{ "symbol":"diamond" }, "name":"Cumulative", "data":[10,17,18,18,16,17,18,19] }, { "type":"spline", "marker":{ "symbol":"circle" }, "name":"Monthly", "data":[10,22,20,19,8,20,25,23] } ]

: 여기

$.getJSON('/data-forecast-accuracy.json', function(result) { 

    viewModel.stats = ko.mapping.fromJS(result); 
    console.log(result) 
    viewModel.saveChanges = function() { 

     var unmapped = ko.mapping.toJSON(viewModel.stats); 
     console.log(unmapped); 

     $.post('save-changes.php', {data: unmapped}) 
     .success(function() { console.log("second success"); }) 
     .error(function() { console.log("error"); }) 
     .complete(function() { console.log("complete"); }); 
    } 

    ko.applyBindings(viewModel); 
}); 

는 JSON이다. 내가 잘못된 각도에서 접근하고 있다면 제안을 열어 라. 궁극적으로 JSON을 UI를 통해 수정 한 다음 저장하고 싶을뿐입니다.

미리 감사드립니다.

답변

1

배열의 값을 올바르게 편집하려면 [1,2,3]에 바인딩 할 실제 속성이 포함 된 구조에 원래 배열을 매핑하려면 [{val: 1}, {val: 2}, {val: 3}]이됩니다. $data에 대한 바인딩은 KO가 사용자 입력에서 업데이트하는 방법을 결정할 수 없기 때문에 작동하지 않습니다 (현재 배열의 일부 인덱스에 있음을 이해할 수 없음). 이것은이 JSON으로 전환 될 때 배열이 자동으로 원래처럼 보이게 this 기술을 사용 http://jsfiddle.net/rniemeyer/vv2Wx/

:

내가 좋아하는 일을 좋아합니다.

+0

Perfect. 내가 녹아웃에 매우 새로운 것에 따라 당신은 나의 무지를 용서해야 할 것이다. js - 나는 나의 문제의 일부가 ko.mapping 배열이 어떻게 작동하는지에 관해 이해하고있다라고 생각한다. 따라서 내가 제안한대로 해당 데이터를 얻고 매핑하려고 할 때 템플릿의 각 반복마다 매핑해야할까요? –

+0

좋습니다. 약간의 손짓을 치고 난 후에 나는 이것을 작용하게했다. 항목을 직접 반환하기 위해 매핑 만들기 옵션을 사용했습니다. 정말 고맙습니다! –