2017-02-05 6 views
1

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

Еженедельная сумма в таблице исходит от self.weeklyExpense = new weeklyExpense();. Этот объект создается со следующей внешней функцией.

function weeklyExpense(data) { 
     if (!data) { 
     this.name = ko.observable(); 
     this.weeklyAmount = ko.observable('0.00'); 
     this.monthlyAmount = ko.observable('0.00'); 
     } else { 
     this.name = ko.observable(data.name); 
     this.weeklyAmount = ko.observable(data.weeklyAmount); 
     this.monthlyAmount = ko.computed(function() { 
      console.log(data.weeklyAmount); 
      var temp = data.weeklyAmount; 
      return total = (Number(temp) * 4.4).toFixed(2); 
     }) 
     } 
    } 

я сузил проблему вплоть до переменной this.monthlyAmount = ko.computed, он не обновляется, когда изменения monthlyAmount. Я проверил в отладчике, что weeklyAmount меняется, но вычисляемая переменная не обновляется. Любая помощь будет принята с благодарностью.

Вот ссылка на рабочий пример JS Fiddle.

ответ

2

Вы ссылаетесь на неправильное свойство: data.weeklyAmount не является наблюдаемым, поэтому ваши вычисленные не обновляются.

Что вам нужно использовать это this.weeklyAmount():

this.monthlyAmount = ko.computed(function() { 
    var temp = this.weeklyAmount(); 
    return total = (Number(temp) * 4.4).toFixed(2); 
}, this); 

Обратите внимание на второй параметр this который делает this указывает на правильный объект inside your computed (если вы не используете self шаблон, как в вашем ViewModel)

Демо-версия JSFiddle.

+0

Спасибо, что это было –

 Смежные вопросы

  • Нет связанных вопросов^_^