2011-09-30 54 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從元素中讀取新的值,它始終是一個字符串。

如果你想保留它的數字,請看這個問題的答案:Knockout.js: time input format and value restriction有幾種方法可以做到這一點。如果您在答案中使用自定義綁定(numericValue),則不需要對映射選項執行其他任何操作。如果您使用numericObservable想法,那麼您需要使用映射選項來確保它創建這些特殊的可觀察對象,而不僅僅是一個正常的可觀察對象。

否則,您也可以繼續使用toJSON覆蓋。

相關問題