2013-01-31 5 views
0

Я хотел бы, чтобы превратить примитивное событие (щелчок) в семантическое событие, как «deleteTodo» Это описано here, но не как реализовать :(
у меня есть следующий код:emberjs: как вызвать пользовательское событие в представлении

App.TodoView = Em.View.extend({ 
    click: function(e) { 
     this.trigger("deleteTodo"); 
    } 
}); 

App.Router.map(function(match) { 
    match('/').to('index'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    deleteTodo: function(e) { 
     // this code is never executed :(
    } 
}) ; 

После того как я выполнить «щелчок», я вижу, что функция TodoView нажмите называется, но не функция deleteTodo от IndexRoute Любые предложения, что может пойти не так, здесь

.?

CHeers

ответ

5

Вы можете использовать this.get ("controller"). Send ("deleteTodo"). Это отправит сообщение контроллеру, если контроллер не обрабатывает deleteTodo, он будет пузыриться на маршрутизаторе и обрабатываться там.

click: function(e) { 
    this.get('controller').send("deleteTodo"); 
} 

В маршрутизаторе вам также необходимо определить событие:

events: { 
    doStuff: function(e) { 
    alert("Do stuff") ;  
    } 
} 

http://jsfiddle.net/9Xasr/7/

Я обычно делать запись удаления в контроллере. Похоже, что положить это в событие маршрутизатора не будет идеальным.

+0

Я не могу заставить его работать, поэтому я создал jsfiddle здесь: http://jsfiddle.net/jeanluca/9Xasr/6/ Любые предложения? –

+0

Его не this.get ('controller'). Send ('deleteTodo'), но для отправки события на маршрутизатор мы должны использовать целевое свойство в контроллере. например this.get ('controller.target'). отправить ('deleteTodo'). Я обновил скрипку здесь: http://jsfiddle.net/9Xasr/9/ – guleria

+0

Когда вы отправляете событие на контроллер, он пузырится на маршрутизаторе. Я предпочитаю отправлять контроллеру, если он хочет обработать событие, и если я его игнорирую, он пузырится на маршрутизаторе. –

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