2015-02-24 83 views
0

我有一個博客文章中的下載列表。點擊鏈接後,我正在遞增下載downloadcount屬性。爲了防止進一步執行,我有這個項目控制器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}} 

回答

1

我的猜測是,在你的#each循環的項目被重新渲染(出於某種原因)和項目控制器被重新創建。有一個相當簡單的方法來測試那些,只是添加到您的項目控制器類:

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

這將運行每次您的項目控制器被實例化時。有了這個,嘗試點擊其中一個下載鏈接,看看它是否在後面運行。如果是這樣,那麼你的問題就是我上面所描述的。由於這個原因,我個人從來沒有在項目控制器中放置持久狀態。我通常允許這個行爲冒泡到父控制器,並把狀態放在那裏。或者我會將模型包裝在一個包裝對象中,並將狀態置於那裏。

+1

我猜這正是發生了什麼事。我認爲當itemController下面的模型改變時,itemController會被重新生成。 – 2015-02-24 15:10:01

+0

你是對的。我現在處理父控制器中的對象,這將不會被重新生成。 – Hedge 2015-02-24 15:14:01