KnockoutJS - принудительное число для определенного поля с помощью плагина ko.mapping

Когда я использую ko.mapping.toJSON, он преобразует любые сделанные мной изменения в строки, и они должны быть числами. Я попытался использовать пользовательское сопоставление следующим образом:

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

... но это только сохраняет их как числа внутри страницы. Поскольку я использую это для обновления и внешнего 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, поэтому я не понимаю, как я могу использовать для него одно и то же переопределение. Нужно ли мне создавать совершенно новый объект, чтобы сделать это и в этом случае. Или их что-то более лаконичное?


person Joel Kelly    schedule 30.09.2011    source источник
comment
Что ж. Я просто использовал тот же функционал, что и в этом посте. stackoverflow.com/questions/7612046/ Аналогично, но мне все еще интересно узнать, лучший ли это способ сделать это.   -  person Joel Kelly    schedule 01.10.2011


Ответы (1)


Всякий раз, когда вы редактируете значение на входе, значение в конечном итоге будет строкой. Knockout считывает новое значение из элемента, и это всегда строка.

Если вы хотите оставить его числовым, посмотрите ответ на этот вопрос: Knockout.js: формат ввода времени и ограничение значения для нескольких способов сделать это. Если вы используете пользовательскую привязку (numericValue) в ответе, то вам больше ничего не нужно делать с параметрами сопоставления. Если вы используете идею numericObservable, вам нужно будет использовать параметры сопоставления, чтобы убедиться, что он создает эти специальные наблюдаемые, а не просто обычные наблюдаемые.

В противном случае вы также можете продолжать использовать переопределение toJSON.

person RP Niemeyer    schedule 01.10.2011