我有一个标准的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),但是没有运气。

最佳答案

问题似乎是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属性何时更改。

10-04 15:47