防止进一步的行动执行

时间:2015-02-24 13:49:26

标签: ember.js ember-cli

我在博客文章中有一份下载列表。点击链接后,我正在增加下载downloadcount属性。为了防止进一步执行,我有了这个项目控制器download。由于某些原因,alreadyIncreased即使在连续执行操作时也始终为假。 那是为什么?

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}}

1 个答案:

答案 0 :(得分:1)

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

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

每次实例化项目控制器时都会运行。有了这个,尝试点击其中一个下载链接,看看它是否在之后运行。如果确实如此,那么你的问题就是我上面所描述的。

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