2014-09-08 2 views
1

Вот мои контроллеры:Ember действие на itemController не работает

App.DesignPhotosController = Ember.ArrayController.extend({ 
    itemController: 'designPhoto' 
}); 


App.DesignPhotoController = Ember.ObjectController.extend({ 
    needs: ['designPhotos'], 
    toDelete: false, 

    actions: { 
     toggleDelete: function() { 
      this.set('toDelete', !this.get('toDelete')); 
     } 
    } 
}); 

И мой шаблон:

{{#each}} 
    <ul> 
    <li> 
     {{title}} 
     {{#if toDelete}} 
     <button class="restore" {{action "toggleDelete"}}>Restore</button> 
     {{else}} 
     <button class="delete" {{action "toggleDelete"}}>Delete</button> 
     {{/if}} 
    </li> 
    </ul> 
{{/each}} 

Однако, когда я нажимаю на кнопку «Удалить», я получаю сообщение вошли:

Error: Nothing handled the action 'toggleDelete'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble. 

насколько я могу сказать, что я делаю это правильно, немного я пытался заставить его различными комбинациями:

  • Добавление target=this к действию

  • Добавление {{#each элемент в контроллере}} и target=item

  • Изменение действия к действию {{toggleDelete это}}, с и без кавычек

Ничего не работает.

Может ли кто-нибудь указать, что я делаю неправильно?

+0

Кажется, что работает здесь http://emberjs.jsbin.com/xedol/1/. Код тоже кажется хорошим, единственное, что может случиться, это то, что контекстный контроллер для вашего шаблона может быть не «designPhotos» (вы можете регистрировать контроллер за пределами каждого и проверять, не так ли это или нет с помощью {{log controller}}) –

+1

Mysterious - только что открыл мой код, чтобы попробовать его запустить и теперь его работа! Возможно, это было что-то испорченное в кеше firefox. – aquavitae

ответ

0

Возможная причина такого поведения: a bug present in 1.13 (up until the very last 1.x release, 1.13.13), которая разбивает действия, которые должны обрабатываться контроллерами элементов.

В случае, если не может вернуться к выпуску 1.12, второй обходной путь от вопроса

меняющегося {{#each}} на {{#each элемента в контроллере}} и добавление target=item к действию

является официально рекомендованным один и работал для моего кода, хотя первый

добавление target=this к действию (с простыми {{#each}})

должно быть, вероятно, тоже работать.

(подозреваю, что OP оставил любой из них в коде и не регистрировал, что исправили проблему, потому что оба пришли, как ложноотрицательных ранее из-за очень продолжительного кэширования в Firefox.)

Смежные вопросы