Расчетное значение не обновляется корректно с помощью 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
изменения собственности.