防止进一步的动作执行
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。如果是,那么你的问题就是我上面描述的问题。
就我个人而言,出于这个原因,我从不在项目控制器中放置持久状态。我通常允许动作冒泡到父控制器并将状态放在那里。或者我会将模型包装在包装器对象中并将状态放在那里。
我在博文中获得了下载列表。单击 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。如果是,那么你的问题就是我上面描述的问题。
就我个人而言,出于这个原因,我从不在项目控制器中放置持久状态。我通常允许动作冒泡到父控制器并将状态放在那里。或者我会将模型包装在包装器对象中并将状态放在那里。