我在博客文章中有一份下载列表。点击链接后,我正在增加下载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}}
答案 0 :(得分:1)
我的猜测是#each
循环中的项目正在重新渲染(由于某种原因),并且正在重新创建项目控制器。有一种相当简单的测试方法,只需将其添加到项目控制器类:
wasCreated: function() {
console.log('Item controller created');
}.on('init')
每次实例化项目控制器时都会运行。有了这个,尝试点击其中一个下载链接,看看它是否在之后运行。如果确实如此,那么你的问题就是我上面所描述的。
就个人而言,由于这个原因,我从未将持久状态置于项目控制器中。我通常允许操作冒泡到父控制器并将状态放在那里。或者我将模型包装在包装器对象中并将状态放在那里。