2013-02-18 5 views
1

я шаблон как часть страницы, которая выглядит так:вид ребенка не обрабатывает событие в emberjs

<script type="text/x-handlebars" data-template-name="listbeer"> 

    <table> 
    {{#each content}} 
     {{#view "DHApp.BeerrowView"}} 
     <tr> 
      <td><button>{{name}}</button></td> 
      <td>{{brewery}}</td> 
     </tr> 
     {{/view}} 

    {{/each}} 
    </table> 
</script> 

У меня также есть два вида, один инкапсулированные таблицу и один, который инкапсулирует строки. Когда я нажимаю на кнопку, вызывается только обработчик обработчика представления родительской (цельной таблицы) (тот, который указан ниже, который указывает, что выбранный родительский щелчок). Я не могу заставить обработчик вида child быть вызванным. Любые идеи, почему, поскольку я пробовал разные вещи и не мог никуда добраться?

Код вид выглядит так:

DHApp.BeerrowView = Ember.View.extend({ 
     click: function(evt) { 
      alert("ClickableView was clicked!"); 
     } 
    }); 

DHApp.ListbeerView = Ember.View.extend({ 
     templateName: 'listbeer', 
     click: function(evt) { 
      alert("parent picked up view"); 
     } 
    }); 

Благодарности

ответ

2

Вы должны определить свой BeerrowView следующим образом:

DHApp.BeerrowView = Ember.View.extend({ 
    tagName: 'tr', 
    click: function(evt) { 
     alert("ClickableView was clicked!"); 
    } 
}); 

и шаблон:

<script type="text/x-handlebars" data-template-name="listbeer"> 

    <table> 
     {{#each content}} 
      {{#view "DHApp.BeerrowView"}} 
       <td><button>{{name}}</button></td> 
       <td>{{brewery}}</td> 
      {{/view}} 

     {{/each}} 
    </table> 
</script> 

Причина в том, что вид добавляет дополнительный div, если вы не определяете имя тега.
См. ember view guide для дальнейших справок.

+0

Спасибо за быстрый ответ, который его исправил. Хотя я все еще не понимаю, почему. Если это вызвало дополнительный элемент html, почему это влияет на обработчик событий? Мое первоначальное ожидание будет состоять в том, что ни один обработчик не будет работать ... – user2022581

+0

Обработчик клика прикреплен к элементу представления. Родительское представление обертывает всю «таблицу» с помощью «div», которая действительна, поэтому она работает. Детский вид обертывает 'tr' с помощью' div' - это недопустимо, поэтому не работает. –

+0

Понял, спасибо – user2022581

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