2011-09-30 3 views
3

ko.mapping.toJSON을 사용하면 문자열로 변경 한 내용이 숫자로 변환됩니다. 다음과 같이 사용자 지정 매핑을 사용해 보았습니다.KnockoutJS - ko.mapping 플러그인을 사용하여 특정 필드의 힘 번호

var mapping = { 
    'y': { 
     update: function(options) { 
       return parseFloat(options.data); 
     } 
    } 
} 

... 그러나 페이지의 컨텍스트 내에 숫자로만 유지됩니다. HighCharts.js가 가져온 외부 JSON을 업데이트하고이를 사용하기 때문에 숫자는 toJSON 후에도 숫자를 유지해야합니다. 이전 답변에서

여기 내가 사용 할 수 있었다 :

//override toJSON to turn it back into a single val 
    mappedData.prototype.toJSON = function() { 
     return parseInt(ko.utils.unwrapObservable(this.val), 10); //parseInt if you want or not 
    }; 

... 거침없이 일한다. 그러나 이것은 JSON에서 하나의 값 유형일 뿐이므로 어떻게 동일한 재정의를 사용할 수 있는지 명확하지 않습니다. 이 인스턴스에서이 작업을 수행하기 위해 완전히 새로운 개체를 만들어야합니까? 아니면 그들의 무언가가 더 간결한가요?

+0

음. 방금이 게시물과 동일한 기능을 사용했습니다. http://stackoverflow.com/questions/7612046/template-for-a-single-dimension-array-with-knockout-js-and-ko-mapping 비슷하지만 여전히 관심이 있는지 알아 보겠습니다. 이것에 대해 "가장 좋은"방법. –

답변

6

입력에서 값을 편집 할 때마다 값이 문자열이됩니다. 녹아웃은 요소에서 새 값을 읽고 항상 문자열입니다.

수치를 유지하려면 다음 질문에 대한 답변을 확인하십시오. Knockout.js: time input format and value restriction 몇 가지 방법이 있습니다. 해답에 사용자 정의 바인딩 (numericValue)을 사용하면 매핑 옵션을 사용하여 다른 작업을 수행 할 필요가 없습니다. numericObservable 아이디어를 사용하는 경우 맵핑 옵션을 사용하여 정상적인 관찰 가능이 아닌 특수 관찰 가능을 작성했는지 확인해야합니다.

그렇지 않은 경우에도 toJSON 무시를 계속 사용할 수 있습니다.