KnockoutJS - номер силы для определенного поля с помощью плагина ko.mapping - PullRequest
3 голосов
/ 01 октября 2011

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

1 Ответ

6 голосов
/ 01 октября 2011

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

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

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

...