Расчетное значение не обновляется корректно с помощью donejs

У меня есть стандартный проект Donejs с компонентом и модель, созданные с использованием генераторов по умолчанию, как это:

donejs add component storyBoard story-board
donejs add supermodel story

Я оставил пример проекта здесь: https://github.com/riescorp/donejs-promise-iterate

Если вы запустите этот пример с помощью donejs develop и перейдите на http://localhost:8080/, вы увидите что-то вроде этого:

образ

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

Почему-то кажется, что когда изменяется любое из этих значений, триггер обновления вообще отсутствует. Я также попытался установить результаты в виде списка (can.List) но без везения.

1 ответ

Решение

Кажется, проблема в том, что elem.pages должно быть elem.attr("pages"),

Вот версия кода, которая работает для меня:

export const ViewModel = Map.extend({
  define: {
    storyPromise: {
      get: function() {
        return Story.getList({});
      }
    },
    stories: {
      get: function(last, resolve) {
        this.attr("storyPromise").then(resolve);
      }
    },
    sum2: {
      get: function() {
        var total = 0;
        if (this.attr('stories') !== undefined) {
          this.attr('stories').each(function(elem) {
            total += parseInt( elem.attr("pages") );
          });
        }
        return total;
      }
    }
  }
});

Вы должны использовать .attr, иначе, sum2 не знает когда pages изменения собственности.

Другие вопросы по тегам