防止进一步的动作执行

Prevent further action executions

我在博文中获得了下载列表。单击 link 我将增加下载量 downloadcount 属性。为了防止进一步的处决,我得到了这个 Item-Controller download。由于某些原因 alreadyIncreased 即使在连续执行操作时也始终为 false。 这是为什么?

import Ember from 'ember';

export default Ember.ObjectController.extend({

  alreadyIncreased: false,

  actions: {
    incDownload: function() {

      if (this.get('alreadyIncreased') === false){
        this.set('alreadyIncreased', true)

        this.get('model').incrementProperty('downloadcount')
        this.get('model').save()
      }
    }
  }
})

这是模板:

  {{#each download in post.downloads itemController="base.download" }}
    <p>
      <a {{ action "incDownload"  }}>
        {{ download.name }}
      </a> - {{ download.downloadcount }} Hits
    </p>
  {{/each}}

我的猜测是 #each 循环中的项目正在重新呈现(出于某种原因)并且正在重新创建项目控制器。有一个相当简单的方法来测试它,只需将其添加到您的项目控制器 class:

wasCreated: function() {
    console.log('Item controller created');
}.on('init')

每次实例化您的项目控制器时,这将 运行。设置好后,尝试单击其中一个下载链接,然后查看它是否 运行s。如果是,那么你的问题就是我上面描述的问题。

就我个人而言,出于这个原因,我从不在项目控制器中放置持久状态。我通常允许动作冒泡到父控制器并将状态放在那里。或者我会将模型包装在包装器对象中并将状态放在那里。