/ / KnockoutJS - номер сили для конкретного поля, використовуючи плагін ko.mapping - knockout.js, knockout-mapping-plugin

KnockoutJS - номер сили для конкретного поля, використовуючи плагін ko.mapping - knockout.js, нокаутинг-картографічний плагін

Коли я використовую 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 перекрити також.