Принудительное обновление регулируемого вычисляемого свойства

У меня есть форма с текстовым вводом, привязанным к вычисляемому свойству (содержащему время). После того, как пользователь вводит значение, оно преобразуется в целочисленное значение, содержащее общее количество минут.

Поскольку это нетривиальная функция (существует множество способов форматирования времени), свойство имеет расширитель дроссельной заслонки.

Все это работает нормально, проблема в том, что когда пользователь вводит значение и сразу же нажимает кнопку сохранения, очевидно, что значение с дросселированием еще не оценено.

self.totalMinutes = ko.observable(0);
self.totalMinutesValue = ko.computed({
    read: function() { 
        return MinutesToFormat(self.totalMinutes()); 
    } 
    write: function(value) { 
        self.totalMinutes(FormatToMinutes(value)); 
    } 
}).extend({ throttle: 250 });

self.Save = function() {
    // Send self.totalMinutes() to server, need to ensure the throttled 
    // computed has been written.
}

Есть ли простой способ заставить свойство немедленно обновляться из метода отправки? Я мог бы добавить setTimeout, но это, конечно, далеко не идеально.


person Willem    schedule 01.05.2014    source источник
comment
Я не использовал дроссель много, но в 3.1 я считаю, что вместо этого рекомендуется использовать расширитель rateLimit. Может быть, это решит проблему? - knockmeout.net/2014/03/knockout-3-1 -released.html   -  person 4imble    schedule 01.05.2014


Ответы (1)


Кажется, что rateLimiter может решить эту проблему.

http://knockoutjs.com/documentation/rateLimit-observable.html

«Запись в наблюдаемые объекты не задерживается; значение наблюдаемого обновляется сразу же. Для доступных для записи вычисляемых наблюдаемых объектов это означает, что функция записи всегда запускается сразу же.

Все уведомления об изменениях задерживаются, в том числе при ручном вызове valueHasMutated. Это означает, что вы не можете использовать valueHasMutated, чтобы заставить наблюдаемый объект с ограниченной скоростью уведомлять о неизмененном значении.

Метод ограничения скорости по умолчанию отличается от алгоритма дросселирования. Чтобы соответствовать поведению дроссельной заслонки, используйте метод notifyWhenChangesStop».

Оценка вычисляемой наблюдаемой с ограничением скорости не ограничена скоростью; он будет переоценен, если вы прочитаете его значение.

person 4imble    schedule 01.05.2014