2015-02-24 2 views
0

У меня есть список загрузок в блогах. При нажатии на ссылку я увеличиваю загрузку downloadcount. Чтобы предотвратить дальнейшие казни, у меня есть этот Item-Controller 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

Я думаю, что этот пункт в вашем #each петле быть повторно вынесено (по некоторым причинам), и контроллер Элемент был создан заново. Там есть довольно простой способ проверить это, просто добавьте в ваш пункте класса контроллера:

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

Это будет работать каждый раз, когда ваш контроллер пункта инстанцированный. Попробуйте нажать на одну из ссылок для загрузки и посмотреть, будет ли она работать потом. Если это так, то ваша проблема - это то, что я описал выше.

Лично я никогда не ставил стойкое состояние в контроллерах элементов по этой причине. Обычно я допускаю, чтобы действие переходило к родительскому контроллеру и помещало там состояние. Или я обмотаю модель в объект-обертку и поставлю туда состояние.

+1

Я предполагаю, что это именно то, что происходит. Я думаю, что когда модель под элементом ControlController изменяется, itemController восстанавливается. –

+0

Вы правы. Теперь я работаю с объектом в родительском контроллере, который не будет восстановлен. – Hedge