Коли я використовую ko.mapping.toJSON
він перетворює будь-які зміни, які я зробив, в рядки, і вони повинні бути числами. Я спробував використати спеціальне відображення так:
var mapping = {
"y": {
update: function(options) {
return parseFloat(options.data);
}
}
}
... але це тільки зберігає їх як числа всередині contect сторінки. Оскільки я використовую це для оновлення і зовнішній JSON, який отримує потягнув в HighCharts.js числа повинні залишатися числа, навіть після 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, так що я незрозуміло, як я можу використовувати той же перевизначення для нього. Чи потрібно створювати цілком новий об'єкт, щоб зробити це в цьому випадку також. Або їх щось більш лаконічне?
Відповіді:
6 за відповідь № 1Всякий раз, коли ви редагуєте значення у вхідному файлі, значення буде в кінцевому підсумку - це рядок. Нокаут читає нове значення з елемента і завжди є рядком.
Якщо ви хочете зберегти його числовим, подивіться на відповідь на це запитання: Knockout.js: формат введення часу та обмеження значення для декількох способів зробити це. Якщо ви користуєтеся користувальницькою прив'язками (numericValue
) у відповіді, то вам не потрібно робити нічого іншого з параметрами відображення. Якщо ви використовуєте numericObservable
Ідея, то вам доведеться використовувати параметри відображення, щоб переконатися, що вона створює ці спеціальні спостережувані, а не просто нормальні спостережувані.
В іншому випадку ви можете продовжувати використовувати toJSON
перекрити також.